从函数返回libconfig类设置对象引用

时间:2019-05-28 10:15:17

标签: c++ libconfig

我正在尝试使用libconfig库来解析来自外部配置文件的变量。

libconfig站点上显示:Config代表配置,而类Setting代表配置设置。请注意,根据设计,这些类都不提供公共副本构造函数或赋值运算符。因此,这些类的实例只能通过引用或指针在函数之间传递。

我在创建将返回Setting类引用的函数时遇到困难(根据我的理解,对本地对象的返回引用不受欢迎。但是我不知道如何在上述限制下声明全局引用)。在底部,我附上了我对此进行编码的尝试的片段,但是它们不起作用。我是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);

1 个答案:

答案 0 :(得分:1)

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后才被销毁,因此您不应获得悬挂的引用。