0

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

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

我很难创建一个返回 Setting 类引用的函数(据我了解,返回对本地对象的引用是不受欢迎的。但我不知道如何声明一个全局引用给定上述限制)。在底部,我附上了我尝试编码的片段,但是它们不起作用。我是 C++ 新手,目前正在阅读一本关于它的教科书,但我对引用和指针的处理仍然感到不安。如果有人能阐明我做错了什么,我将不胜感激。

配置文件

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);
4

1 回答 1

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因此您不应获得悬空引用。

于 2019-05-28T12:30:16.023 回答