【问题标题】:libconfig++ : adding a setting to the root of the configuration treelibconfig++ :将设置添加到配置树的根目录
【发布时间】:2016-05-05 13:58:29
【问题描述】:

我有一个配置文件myCfg.cfg,如下所示:

keyA = 1.0
keyB = 2
keyC = "hello"

请注意,所有设置都位于配置树的根目录。

我希望我的 C++ 程序加载该文件,然后添加一个新设置,其键为 keyD,并为其分配整数值 5。最终,MyCfg 在内存中应该是这样的:

keyA = 1.0
keyB = 2
keyC = "hello"
keyD = 5

首先加载myCfg.cfg 文件以构造MyCfg。然后设置keyD 必须添加到MyCfg 的根。 libconfig documentation 表示 Setting::add() 方法:

将具有给定名称和类型的新子设置添加到设置中,该设置必须是组

但是,MyCfg 中没有任何组... 那么如何将设置添加到 Config 对象的根目录?

【问题讨论】:

  • @Gluttton 我不确定您所说的“您保存设置了吗?”。首先,我通过从 *.cfg 文件中读取配置来构造一个 Config 实例,然后我采用该 Config 对象并尝试向其添加设置。我从不尝试编写与输入的 *.cfg 文件以及额外设置相对应的新 *.cfg 文件。
  • @Gluttton 不,我没有打电话给writeFile(),我也不打算这样做。以下是有关上下文的更多信息:我使用 Config 对象作为运行代码的参数集合。代码中有两个类似的例程:首先,用户必须通过在 *.cfg 文件中指定设置来选择参数。另一方面,该参数只有一个值是有意义的。因此,为了对用户隐藏它,我要求他/她编写一个没有该设置的配置文件,并且代码必须在之后添加它。

标签: c++ libconfig


【解决方案1】:

看起来您只需要:getRoot ()

示例如下:

#include <iostream>
#include "libconfig.h++"


int main ()
{
    libconfig::Config MyCfg;
    std::string file = "myCfg.cfg";

    try {
        MyCfg.readFile (file.c_str () );

        libconfig::Setting & root = MyCfg.getRoot ();
        // This also works.
        // libconfig::Setting & root = MyCfg.lookup ("");
        libconfig::Setting & keyD = root.add ("KeyD", libconfig::Setting::TypeInt);
        keyD = 5;

        // You dont need it, but it's just for testing.
        MyCfg.writeFile (file.c_str () );
    }
    catch (...) {
        std::cout << "Error caused!" << std::endl;
    }

    return 0;
}

【讨论】:

  • 好的,谢谢! (该死的,那是在 example/example2.cpp…RTFM 给我自己…)
  • 在使用getRoot() 后,我意识到libconfig::Setting &amp; root = MyCfg.getRoot() 可以替换为``libconfig::Setting & root = MyCfg.lookup("")` 或libconfig::Setting &amp; root = MyCfg.getRoot(".")。尽管getRoot() 是迄今为止最优雅的,但这三个都有效!也许您想将此评论添加到您的答案中?我认为我的代码中一定有一个错误,这让我感到困惑……结果我编辑了我的问题。再次感谢您的帮助!
  • 我在我的回答中添加了关于lookup ("") 的评论。但是版本MyCfg.getRoot(".") 对我不起作用(我无法编译它,它与文档相对应,因为没有带有参数的版本getRoot)。
  • 我的错误:是MyCfg.lookup("."),而不是MyCfg.getRoot(".")
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 2019-11-03
  • 2013-03-13
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2021-03-29
相关资源
最近更新 更多