0

有没有一种方法可以加载如下所示的动态 INI 文件。

[basic]
number_of_servers=3

[server1]
ip=10.20.30.40
password=sdfslkhf    

[server2]
ip=10.20.30.41
password=sdfslkhf

[server3]
ip=10.20.30.42
password=sdfslkhf

这里的想法是这里定义的服务器非常特定于软件的部署;所以管理员决定有多少服务器参与配置。

有没有办法在 boost program_options 中处理这个问题?

4

4 回答 4

3

另一种可能更标准的方式是这样的:

[basic]
number_of_servers=3

[server]
name=server1
ip=10.20.30.40
password=sdfslkhf    

[server]
name=server2
ip=10.20.30.41
password=sdfslkhf

[server]
name=server3
ip=10.20.30.42
password=sdfslkhf

这样您就不必担心未定义的部分名称,而且我认为这种风格也被更广泛地使用(肯定是 QuickFIX 的做法,与我概述的非常相似)。

而且您可能可以删除number_of_servers条目,然后使用该count()功能查找有多少server部分。

于 2010-12-13T00:37:14.367 回答
2

有一个可选bool参数允许parse_config_file函数中未注册的条目。默认情况下它设置为 false。请参阅此处的文档:

http://www.boost.org/doc/libs/1_45_0/doc/html/boost/program_options/parse_config_file_id991860.html

如果你用truethen 调用这个函数,它会将任何未注册的条目添加到variables_mapas 字符串中。variables_map::count您可以使用该功能检查它们是否存在。

我希望这会有所帮助。

于 2010-12-13T00:32:50.263 回答
0

你当然可以。服务器部分有一个模式:只需将所有匹配该模式的部分加载到服务器列表中。

于 2010-12-12T23:19:49.960 回答
0

我在解决这个问题时面临的挑战是确保这些部分保持在一起并且不会混淆。

最后,我依赖于带有已知/有限选项的 options_description,然后使用来自 parse_config_file 的 parsed_options,我必须收集所有无法识别的选项( collect_unrecognized )。然后我不得不迭代它以按顺序选择选项。

感谢每一个人的贡献。

于 2010-12-22T11:59:02.773 回答