编译时配置文件解析和设置参数

时间:2014-12-02 21:24:42

标签: c++ boost

这可能会被标记为重复,但如果已经提出要求,我找不到正确的问题。

我能做什么:

  1. 运行时解析配置文件和设置参数

  2. 可以使用#defines等但我不想用哈希定义重载整个代码

  3. 我想要的是什么:

    在编译期间在类(或其成员)中设置参数的任何方法。该类是静态的,带有typedef和其他静态变量(很多) - 我想在编译期间设置这些值。 (#define等不可行)。 boost::program_options<..>可以有用吗?

1 个答案:

答案 0 :(得分:1)

使用简单的特征,例如任何用户定义类型的一些默认配置值:

namespace config_traits {
    template<typename ForType> struct enable_serialization : std::false_type {
    };
}

现在,考虑用户定义的类型,该类型可选地支持反序列化:

class MyConfigurableType {
   typedef config_traits::enable_serialization<MyConfigurableType> enable_serialization;

   std::enable_if<enable_serialization::value, void>::type do_serialization() const {
      std::cout << "Serialized";
   }

};

现在您可以在配置标头中切换它:

namespace config_traits {

   template<> struct enable_serialization<MyConfigurableType> : std::true_type {
   };
}

启用序列化


对于真正的幻想,你可以使用像metamonadmetaparse这样的TMP库(来自 mpllibs )来实际解析这些来自字符串的设置,在编译时。

我发现除了查找编译器限制外,绝对没有任何好处。