gpt4 book ai didi

c++ - 配置结构的 const 正确性

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:19 25 4
gpt4 key购买 nike

我有一个配置文件,它在我的程序运行时开始时被读入、解析并放入结构中。

我遇到的问题是我希望这些结构保持不变,因为它们中的值在程序生命周期内不应更改。

目前我正在做以下事情:

配置.h

#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;

配置.cpp

/*-- 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

最佳答案

一如既往,你能做的最好的事情就是不要重新实现已经写好的东西。有大量的库和框架将有助于 C++ 的序列化:

理想情况下,您选择的序列化框架将准确地重新创建您尝试存储的数据图。不管您是否进行了任何修复,您的目标很可能是只提供对全局配置数据的常量访问。只需确保未通过头文件公开修改器(包括非 const 指针)即可。

关于c++ - 配置结构的 const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com