返回 libconfig class 从函数设置对象引用
Returning libconfig class Setting object reference from function
我正在尝试使用 libconfig 库来解析来自外部配置文件的变量。
On libconfig site it says: The class Config represents a configuration, and the class Setting 表示配置设置。请注意,根据设计,这些 classes 都不提供 public 复制构造函数或赋值运算符。因此,这些 classes 的实例只能通过引用或指针在函数之间传递。
我在创建一个将 return 设置 class 引用的函数时遇到困难(根据我的理解 return 对本地对象的引用是不受欢迎的。但我没有考虑如何在给定上述限制的情况下声明全局引用)。在底部,我附上了我尝试对此进行编码的片段,但是它们不起作用。我是 C++ 的新手,目前正在阅读有关它的教科书,但我对引用和指针的处理仍然犹豫不决。如果有人能阐明我做错了什么,我将不胜感激。
config.cfg
A=
{
min = 3;
}
代码
libconfig::Setting& GetKey(const char* filename, const char* method)
{
libconfig::Config cfg;
cfg.readFile(filename);
libconfig::Setting &root = cfg.getRoot();
libconfig::Setting &key = root[method];
// How can I return key?
}
libconfig::Setting &key = GetKey("config.cfg","A");
key.lookupValue("min",min);
libconfig::Config
中各种方法返回的值是对 libconfig::Config
对象中保存的对象的引用。
文档中并不清楚这些引用的有效期,但当 cfg
对象被销毁时它们肯定会失效。如果您对 cfg
对象进行更改,它们可能会失效,但文档中没有说明。
将您的代码重组为以下内容应该可行:
libconfig::Setting& GetKey(libconfig::Config& cfg, const char* method)
{
libconfig::Setting &root = cfg.getRoot();
libconfig::Setting &key = root[method];
// How can I return key?
}
libconfig::Config cfg;
cfg.readFile("config.cfg");
libconfig::Setting &key = GetKey(cfg,"A");
key.lookupValue("min",min);
cfg
在您停止使用 key
之前不会被销毁,因此您不应该得到悬空引用。
我正在尝试使用 libconfig 库来解析来自外部配置文件的变量。
On libconfig site it says: The class Config represents a configuration, and the class Setting 表示配置设置。请注意,根据设计,这些 classes 都不提供 public 复制构造函数或赋值运算符。因此,这些 classes 的实例只能通过引用或指针在函数之间传递。
我在创建一个将 return 设置 class 引用的函数时遇到困难(根据我的理解 return 对本地对象的引用是不受欢迎的。但我没有考虑如何在给定上述限制的情况下声明全局引用)。在底部,我附上了我尝试对此进行编码的片段,但是它们不起作用。我是 C++ 的新手,目前正在阅读有关它的教科书,但我对引用和指针的处理仍然犹豫不决。如果有人能阐明我做错了什么,我将不胜感激。
config.cfg
A=
{
min = 3;
}
代码
libconfig::Setting& GetKey(const char* filename, const char* method)
{
libconfig::Config cfg;
cfg.readFile(filename);
libconfig::Setting &root = cfg.getRoot();
libconfig::Setting &key = root[method];
// How can I return key?
}
libconfig::Setting &key = GetKey("config.cfg","A");
key.lookupValue("min",min);
libconfig::Config
中各种方法返回的值是对 libconfig::Config
对象中保存的对象的引用。
文档中并不清楚这些引用的有效期,但当 cfg
对象被销毁时它们肯定会失效。如果您对 cfg
对象进行更改,它们可能会失效,但文档中没有说明。
将您的代码重组为以下内容应该可行:
libconfig::Setting& GetKey(libconfig::Config& cfg, const char* method)
{
libconfig::Setting &root = cfg.getRoot();
libconfig::Setting &key = root[method];
// How can I return key?
}
libconfig::Config cfg;
cfg.readFile("config.cfg");
libconfig::Setting &key = GetKey(cfg,"A");
key.lookupValue("min",min);
cfg
在您停止使用 key
之前不会被销毁,因此您不应该得到悬空引用。