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

标签 c++ libconfig

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

关于 libconfig网站上写着:类(class)Config表示一个配置,类Setting表示配置设置。请注意,根据设计,这些类都不提供公共(public)复制构造函数或赋值运算符。因此,这些类的实例只能通过引用或指针在函数之间传递。

我在创建一个将返回 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);

最佳答案

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 之前不会被销毁,因此您不应获得悬空引用。

关于c++ - 返回 libconfig 类 从函数设置对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339917/

相关文章:

c++ - 如何使用自定义库的 boost 库进行性能测试

c - LibConfig - 如何获取容器列表

c++ - 在 Qt (C++) 中使用第三方库 (libconfig)

java - Java 的类似 `libconfig` 之类的东西?

c++ - 线程的静态与动态内存分配

c++ - Boost Threads 生产者/消费者意外行为

c++ - 组织基于任务的科学计算

c++ 在 libconfig++::lookupValue() 中将类实例作为浮点变量传递

c++ - Libconfig 编辑配置值

c++ - 如何确定 Windows 用户是否可以休眠(使用 C++)