我有一个配置文件,它在我的程序运行时开始时被读入、解析并放入结构中。
我遇到的问题是我希望这些结构保持不变,因为它们中的值在程序生命周期内不应该改变。
目前我正在做以下事情:
配置文件
#pragma warning(push)
#pragma warning(disable: 4510) /*-- we don't want a default constructor --*/
#pragma warning(disable: 4610) /*-- we don't want this to ever be user instantiated --*/
typedef struct SerialNode {
private:
void operator=(SerialNode&);
public:
const char* const port;
const char* const format;
} SerialNode;
#pragma warning(pop)
typedef std::map<const char*, const SerialNode*, MapStrComp> SerialMap;
SerialMap SerialConfig;
配置文件
/*-- so we don't fall out of scope --*/
SerialNode* global_sn;
SerialNode local_sn = {port, format};
global_sn = new SerialNode(local_sn);
SerialConfig[key_store] = global_sn;
这工作正常。但是我的问题是,现在我正在处理更复杂的配置数据,这需要我从列表中拉出一个结构,修改它,然后再放回去。
显然我不能修改它,所以解决方案是这样的:
SerialNode* global_sn;
SerialNode* old_sn = SerialConfig[key_store];
SerialNode local_sn = {port, format, old_sn->old_data, old_sn->more_old_data};
global_sn = new SerialNode(local_sn);
SerialConfig[key_store] = global_sn;
delete old_sn;
但这让我觉得这是糟糕的编程习惯。有没有更好的方法来实现我的目标,而不需要这种看起来很黑的解决方案?
作为参考,我使用的是 Visual Studio 2010