C++ 轻量级配置库

16

我正在寻找一个具有非限制性许可证的跨平台C++轻量级配置库。 我需要比标准属性文件更复杂的东西,但我不想使用XML(写入太多:-))。

我希望以这种方式编写配置:

render = 
{
    window = 
    {
        width = 800,
        height = 600
    }
}

2
我找到了libconfig。它看起来不错,但是它使用异常来报告错误... - runnydead
2
我也认为libconfig相当不错。我对C++ API有一些问题,而且似乎没有Java的实现(这意味着只有C/C++应用程序可以读取配置文件),但目前它仍然是我首选的配置库。 - m-renaud
1
libconfig 似乎已经失效。手册页面和下载链接都指向一个未配置的 WordPress 网站。 - jwm
1
虽然谷歌找到了 https://github.com/hyperrealm/libconfig,该项目仍在活跃。 - jwm
2个回答

15

boost有一个名为property_tree的库。该许可证允许商业使用。

您的示例:

ptree pt;
pt.put("render.window.width", 800);
pt.put("render.window.height", 600);

这可以例如导出为JSON格式

write_json("my_config.json", pt);

然后它将看起来像这样

{
  "render":
  {
    "window":
    {
      "width": 800;
      "height": 600;
    }
  }
}

你可以以相同的方式将其导出为XML、INI和INFO。


4
根据我的经验,Boost 并不是一个轻量级库,但我会去研究它,因为看起来很有前途。 - runnydead
6
据我所知,要使此工作正常运行,您不需要整个Boost库。Boost有一种名为bcp的工具,专门用于提取单个库。 - In silico
尽一切努力避免提升。 - undefined

5
你也可以尝试使用JsonCpp,用类似的语法编写你的配置文件,它使用的是Json格式。
// Configuration options
{
    // Default encoding for text
    "encoding" : "UTF-8",

    // Plug-ins loaded at start-up
    "plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],

    // Tab indent size
    "indent" : { "length" : 3, "use_space": true }
}

这个软件是基于 MIT 许可证 的,因此非常宽容。


6
自这篇答案被写出来以来,JSON for Modern C++已经成为了一款非常受欢迎的C++ JSON库,同样值得关注。 - Rotsiser Mho
上述内容不是标准的JSON格式,因为JSON不允许添加注释。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接