有没有办法加载动态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中处理这个?
答案 0 :(得分: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
个部分。{/ p>
答案 1 :(得分: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
如果您使用true
调用此函数,则会将任何未注册的条目添加到variables_map
中作为字符串。您可以使用variables_map::count
函数检查它们是否存在。
我希望有所帮助。
答案 2 :(得分:0)
当然可以。服务器部分有一个模式:只需将匹配模式的所有模块加载到服务器列表中。
答案 3 :(得分:0)
我在解决这个问题时面临的挑战是确保这些部分保持在一起并且不会混淆。
最后,我依靠带有已知/有限选项的options_description,然后使用来自parse_config_file的parsed_options,我必须收集所有无法识别的选项(collect_unrecognized)。然后我不得不迭代它以按顺序选择选项。
感谢每一位人士的贡献。