Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;:程序设置-boost.PropertyTree或boost.program\u选项? 我正在寻找一个解决方案来存储C++中的程序设置或选项或配置。这些可能是GUI中公开的设置,需要在代码运行之间保存_C++_Boost_Configuration_Boost Program Options_Boost Propertytree - Fatal编程技术网

c++;:程序设置-boost.PropertyTree或boost.program\u选项? 我正在寻找一个解决方案来存储C++中的程序设置或选项或配置。这些可能是GUI中公开的设置,需要在代码运行之间保存

c++;:程序设置-boost.PropertyTree或boost.program\u选项? 我正在寻找一个解决方案来存储C++中的程序设置或选项或配置。这些可能是GUI中公开的设置,需要在代码运行之间保存,c++,boost,configuration,boost-program-options,boost-propertytree,C++,Boost,Configuration,Boost Program Options,Boost Propertytree,在我的搜索中,我遇到了一个似乎是不错的选择。我知道boost是受人尊敬的代码,所以我很乐意使用它,所以我开始使用它进行开发。然后我遇到了它,它似乎允许您做同样的事情,但对于程序设置的特定用例,它看起来更专业 现在我想知道哪一个最适合这份工作?(或者有第三种选择比两者都好) 编辑: 仅供参考,这是一个插件,所以它不会使用命令行选项(在中,甚至不可能) 更新 我最终还是选择了boost.PropertyTree。我需要能够将更改后的选项保存回INI,但我没有看到使用boost.program\u选项

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

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

编辑: 仅供参考,这是一个插件,所以它不会使用命令行选项(在中,甚至不可能)

更新


我最终还是选择了boost.PropertyTree。我需要能够将更改后的选项保存回INI,但我没有看到使用boost.program\u选项实现这一点的方法。

使用
boost::program\u options
。这正是它的目的。在一个库中,您可以获得命令行选项、环境变量选项和类似INI的配置文件解析器。它们都以正确的方式集成在一起,因此当用户在多个源中指定相同的选项时,库知道要考虑的优先顺序。
另一方面,boost::property_tree是一个更通用的库。该库将文本流解析为统一的数据模型。但是您需要进行真正的解析,即根据您的需要理解数据块。当库看到特定选项字符串时,它不知道何时需要参数,或者不允许特定选项的特定值或值类型。

也存在非Boost可能性。Config4Cpp是我编写的一个健壮、易于使用且有全面文档记录的配置文件解析器库。可在以下网址下载:

我建议您阅读《实际使用指南》手册,以了解Config4Cpp如何实现您想要的功能。然后打开入门指南手册,浏览章节和部分(您可能更喜欢阅读)。这样做可以提供足够的详细信息,帮助您决定Config4Cpp是否比Boost更适合您的需要


顺便说一句,文档中指定的章节很短,因此阅读它们不会花费太长时间。

经过深入研究后,我认为boost.PropertyTree仍然是最好的解决方案,因为它使我能够在程序中更改选项后保存选项,这是一项要求。

忘了提及(我编辑了我的帖子)我根本不会使用命令行选项。这会改变你的答案吗?或者你认为即使你纯粹使用INI功能,它也是一个更好的选项吗?@User,我认为不会。正如@wilhelmtell所说,它考虑了所有3个源。我想顺序是:INI文件->环境->命令行,最后遇到的值是winning.严格地说,甚至不需要传入命令行参数,因此如果完全忽略它们,就可以了。这不会改变我的答案。例如,我有时使用
boost::program_options
,即使我不使用环境变量或INI文件。或者即使我不需要其中任何一个。库是否支持是否将选项保存回ini文件?例如,用户通过GUI更改选项,然后我的程序将更改后的选项值保存回ini文件?