c++:程序设置 - boost.PropertyTree 还是 boost.program_options?

2024-01-04

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

在我的搜索中我遇到了boost.PropertyTree http://www.boost.org/doc/libs/1_46_1/doc/html/property_tree.html这似乎是一个不错的选择。我知道 boost 是备受推崇的代码,所以我很舒服地使用它,所以我开始使用它进行开发。然后我遇到boost.program_options http://www.boost.org/doc/libs/1_46_1/doc/html/program_options.html这似乎允许您做同样的事情,但看起来也更适合程序设置的特定用例。

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

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

UPDATE

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++:程序设置 - boost.PropertyTree 还是 boost.program_options? 的相关文章

随机推荐

  • Dart 库布局

    我正在努力解决 Dart 库布局问题 我尝试了以下方法 lib A dart B dart my lib dart 在哪里 达特 class A B myB B dart class A B myB my lib dart library
  • 无法更新快照命名空间:无法在“/etc/docker”中创建符号链接:现有文件妨碍

    Docker命令在重启后不起作用 使用sudo reboot Ubuntu 20 04 服务器 现在 对于任何使用 docker 的命令 它都会给我一个错误 例如 docker help cannot update snap namespa
  • LESS css - JS 解析器与编译器

    我想知道是否有人知道 LESS css 的 JS 解释器是否会导致页面加载出现明显的延迟 我更喜欢使用 JS 解析器 因为它更容易使用 因为我不必在每次编辑后运行编译器 并且更容易管理源代码 因为 SCM 工具不会同时跟踪 less 和 c
  • Java/GWT/MySQL:连接被拒绝?

    我正在开发一个 GWT Web 应用程序 并尝试从我的 RemoteServiceServlet 实现 用于 rpc 连接到 mysql 数据库 服务器运行 我可以从我工作的机器连接到数据库 出于测试目的 我编写了一个仅连接到数据库的小程序
  • Firebase 获取 - 无访问控制允许来源

    我正在开发一个应用程序React Redux我有我的JSON数据库内FirebaseD B 为了做到这一点 我正在尝试fetch我的数据来自有效的 URL 通过 Firebase 模拟器验证 let firebase https fireb
  • Azure存储表-插入批量行并检查它们是否存在

    我发送对某些服务的查询并返回结果 我想知道我过去是否已经得到了相同的 答案 所以 我打算使用Azure Table作为缓存机制 我做了这个小 POC TableBatchOperation batchOperation new TableB
  • 如何以编程方式运行 Java 应用程序中的所有 JUnit 测试?

    通过 Eclipse 我可以轻松运行应用程序中的所有 JUnit 测试 我希望能够从应用程序 jar 在目标系统上运行测试 而无需 Eclipse 或 Ant 或 Maven 或任何其他开发工具 我可以看到如何从命令行运行特定的测试或套件
  • 如何使用pyInstaller完整打包所有必需的库?

    我已经使用 pyinstaller 创建了我的 python 应用程序的独立应用程序 pyinstaller windowed app py 它实际上在我的计算机上运行并且按预期工作 但是当我在我朋友的计算机上尝试它时 它不起作用 它运行但
  • 选择表列名称作为值[重复]

    这个问题在这里已经有答案了 给定一个具有任意数量的记录 X 和任意数量的列 Y 的 SQL 表 RecordID Column1 Column 2 Column 3 Column Y 1 Value11 Value12 Value13 Va
  • DPI 无法正确缩放

    我创建了一个自定义 UserControl 其功能与 numbericUpDown 非常相似 但具有各种增强功能 例如 它可以显示分数 但是 此控件的缩放比例不如窗体上的其他一些控件 这迫使我的 UI 看起来很尴尬 我尝试了控件及其父控件的
  • 片段 onHiddenChanged 未调用

    我最近将 Fragments 添加到我的应用程序中 对于新的应用程序 我需要获得 显示我的片段后立即通知 所以我可以尽快做一些计算 片段再次显示 我的 Fragment 与 TabIndicator 一起使用 并且仅使用一个 Fragmen
  • REXML::Document.new 我们可以在这一行给出编码参数吗?

    doc REXML Document 新文件 每当我的 xml 文件包含 UTF 8 以外的一些特殊字符时 我的代码就会失败 REXML ParseException
  • 在配置私有 GKE 集群时了解 --master-ipv4-cidr

    我试图进一步了解当我在 Google 的 Kubernetes Engine 中配置私有集群时到底发生了什么 Google 在此提供了一个配置私有集群的示例 其中控制平面服务 例如 Kubernetes API 位于172 16 0 16
  • 如何获取访问Google Play开发者API的授权

    我正在尝试访问 Google Play 开发者 APIhttps developers google com android publisher https developers google com android publisher 为
  • 以编程方式在 WinForms VB.NET/C# 中聚焦/突出显示 ListView 列标题

    在 WinForms ListView 上 将鼠标悬停在列标题上会导致其聚焦或强调 例如 我需要动态地执行此操作 因为在我的程序中使用左右键切换焦点列 尽管广泛搜索了以下属性 ListView Columns i ListView Colu
  • Haskell 在现实世界中的用途是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于 Haskell 有很多炒作 但是 很难获得有关如何在现实世界应用程序中使用它的信息 Haskell 最流行的项目 用法是什么 为什么它擅长
  • typeahead.js 预取不起作用

    我无法让 typeahead js 中的预取函数工作 但它对于本地数据工作得很好 我首先尝试链接到返回 json 对象或列表的 servlet 但过了一会儿我放弃了 并开始检查提供的示例 因此 他们的示例链接到的页面如下所示 http tw
  • 每 10 秒调用一个函数 Angular2

    我正在尝试创建一个Timer这称为API call每 10 秒 我使用setTimeOut但问题是 它变成了无限循环 即使我推送到另一个页面 它也会继续加入 if 条件 例子 我在启动 10 秒 API 调用的方法上调用此方法 setTim
  • 将字典从 Swift 发送到 PHP

    如何将 Swift 生成的字典作为 PHP URL 中的参数发布 具体来说 任务是更新托管数据库上的许多字段 我不是将每个字段的新值定义为单独的参数 而是希望传递一个字典 其中键是字段名称 值是新值 该数据已经作为Dictionary
  • c++:程序设置 - boost.PropertyTree 还是 boost.program_options?

    我正在寻找一种在 C 中存储程序设置或选项或配置的解决方案 这些可能是在 GUI 中公开的设置 需要在代码运行之间保存 在我的搜索中我遇到了boost PropertyTree http www boost org doc libs 1 4