这可能会被标记为重复,但如果已经提出要求,我找不到正确的问题。
我能做什么:
运行时解析配置文件和设置参数
可以使用#defines等但我不想用哈希定义重载整个代码
我想要的是什么:
在编译期间在类(或其成员)中设置参数的任何方法。该类是静态的,带有typedef和其他静态变量(很多) - 我想在编译期间设置这些值。 (#define等不可行)。 boost::program_options<..>
可以有用吗?
答案 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 {
};
}
启用序列化
对于真正的幻想,你可以使用像metamonad
和metaparse
这样的TMP库(来自 mpllibs
)来实际解析这些来自字符串的设置,在编译时。
我发现除了查找编译器限制外,绝对没有任何好处。