【问题标题】:c++: program settings - boost.PropertyTree or boost.program_options?c++:程序设置 - boost.PropertyTree 或 boost.program_options?
【发布时间】:2011-08-22 01:43:05
【问题描述】:

我一直在寻找在 C++ 中存储程序设置或选项或配置的解决方案。这些可能是在 GUI 中公开的设置,需要在我的代码运行之间保存。

在我的搜索中,我遇到了boost.PropertyTree,这似乎是一个不错的选择。我知道 boost 是受人尊敬的代码,所以我很喜欢使用它,所以我开始使用它进行开发。然后我遇到了boost.program_options,它似乎可以让你做同样的事情,但看起来更专业于程序设置的特定用例。

现在我想知道哪个最适合这份工作? (或者有没有比两者都好的第三种选择)

编辑: 仅供参考,这是一个插件,因此它不会使用命令行选项(因为它甚至不可能)。

更新

我最终坚持使用 boost.PropertyTree。我需要能够将更改的选项保存回 INI,但我没有看到使用 boost.program_options 的方法。

【问题讨论】:

    标签: c++ boost configuration boost-program-options boost-propertytree


    【解决方案1】:

    使用boost::program_options。这正是它的用途。在一个库中,您可以获得命令行选项、环境变量选项和类似 INI 的配置文件解析器。而且它们都以正确的方式集成在一起,因此当用户在多个这些来源中指定相同的选项时,库知道要考虑的正确优先级顺序。

    另一方面,boost::property_tree 是一个更通用的库。该库将文本流解析为统一的数据模型。但是需要进行真正的解析——即根据您的需要理解数据块。当看到特定选项字符串时,库不知道何时需要参数,或者不允许特定选项的特定值或值类型。

    【讨论】:

    • 忘了提到(我编辑了我的帖子)我根本不会使用命令行选项。这是否会改变您的答案,或者您认为即使您纯粹使用 INI 功能也是一个更好的选择?
    • @User,我不这么认为。正如@wilhelmtell 所说,它考虑了所有三个来源。我认为顺序是:ini文件->环境->命令行,最后遇到的值获胜。严格来说,甚至不需要传入命令行参数,所以完全省略它们应该没问题。
    • 这不会改变我的答案。例如,即使我不使用环境变量或 INI 文件,我有时也会使用 boost::program_options。甚至当我不需要其中任何一个时。
    • 库是否支持将选项保存回 ini 文件?例如,用户通过 GUI 更改选项,然后我的程序将更改的选项值保存回 ini 文件?
    【解决方案2】:

    经过一番挖掘,我认为 boost.PropertyTree 仍然是最好的解决方案,因为它使我能够在从程序中更改选项后保存选项,这是必需的。

    【讨论】:

      【解决方案3】:

      也有非 Boost 的可能性。 Config4Cpp 是我编写的一个健壮、易于使用和全面记录的配置文件解析器库。可通过www.config4star.org 获取。

      我建议您阅读实用使用指南手册中的Chapter 3 (Preferences for a GUI Application),以了解 Config4Cpp 如何实现您想要的功能。然后打开入门指南手册,略读章节23,以及部分7.4(您可能更喜欢阅读PDF version of that manual)。这样做应该会为您提供足够的详细信息,以帮助您确定 Config4Cpp 是否比 Boost 更适合您的需求。

      顺便说一下,文档中指定的章节和部分都很短,所以应该不会花很长时间阅读。

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 2011-02-24
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多