X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8569ecdc2c9368dc0fe650b901cce7b37337ffec..71f9f56c6dee0f8b1e7f6df93a56f95f4974d4d2:/projects/sgconf/actions.h

diff --git a/projects/sgconf/actions.h b/projects/sgconf/actions.h
index c88de14d..33a11347 100644
--- a/projects/sgconf/actions.h
+++ b/projects/sgconf/actions.h
@@ -89,6 +89,7 @@ class PARAM_ACTION : public ACTION
         virtual std::string DefaultDescription() const;
         virtual OPTION_BLOCK & Suboptions() { return m_suboptions; }
         virtual PARSER_STATE Parse(int argc, char ** argv);
+        virtual void ParseValue(const std::string & value);
 
     private:
         RESETABLE<T> & m_param;
@@ -129,6 +130,25 @@ m_param = value;
 return PARSER_STATE(false, --argc, ++argv);
 }
 
+template <typename T>
+inline
+void PARAM_ACTION<T>::ParseValue(const std::string & stringValue)
+{
+if (stringValue.empty())
+    throw ERROR("Missing value.");
+T value;
+if (str2x(stringValue, value))
+    throw ERROR(std::string("Bad value: '") + stringValue + "'");
+m_param = value;
+}
+
+template <>
+inline
+void PARAM_ACTION<std::string>::ParseValue(const std::string & stringValue)
+{
+m_param = stringValue;
+}
+
 template <>
 inline
 PARSER_STATE PARAM_ACTION<std::string>::Parse(int argc, char ** argv)