X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/1b2ab8e6d556a8ed30d4feadc72263b3f4c86665..cf7325e6b3244c7174424fa71e1972523324a69b:/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)