我一直在考虑The Right Way (R)
来存储程序的内部配置。
以下是详细信息:
我对此有疑问:
std::map
用于
自定义变量是一个不错的选择吗?谢谢!
PS:如果问题不明确,请随时询问更多信息。
更新:哇,每个答案似乎都隐含或明确地使用了提升。我应该提到我想避免使用boost(我现在想要探索标准库的功能)。
答案 0 :(得分:3)
您可以使用Boost.PropertyTree。
属性树是通用数据 结构,但特别是 适合保存配置数据。 树提供了自己的, 树特定的接口和每个节点 也是STL兼容的序列 它的子节点。
答案 1 :(得分:1)
你可能比某种属性映射更糟糕(StringMap
只是一个typedef'd std :: map)
class PropertyMap
{
private:
StringMap m_Map;
public:
PropertyMap() { };
~PropertyMap() { };
// properties
template<class T>
T get(const String& _key, const T& _default = T()) const
{
StringMap_cit cit(m_Map.find(_key));
return (cit != m_Map.end()) ? boost::lexical_cast<T>(cit->second) : _default;
}; // eo get
// methods
void set(const String& _cap, const String& _value)
{
m_Map[_cap] = _value;
}; // eo set
template<class T>
void set(const String& _key, const T& _val)
{
set(_key, boost::lexical_cast<String>(_val));
}; // eo set
};
答案 2 :(得分:0)
支持配置文件中的嵌套非常有用。类似于JSON。
由于参数值可以是标量,数组和嵌套的参数组,因此它可以存储在std::map
的{{1}}中,其值可以是标量,数组或其他{{1}递归地。请注意boost::variant
按名称排序,因此如果参数的原始配置文件顺序很重要,那么也应该有一个顺序的参数索引。这可以通过使用带有有序或散列索引的std::map
进行快速查找来实现,也可以使用顺序索引来遍历原始配置文件顺序中的参数。
我没有检查过,提升属性图可以从我所听到的那样做。
可以将所有值存储为字符串(或数组值的字符串数组),只有在访问它时才将它们转换为目标类型。