是否有一种方法可以像下面的一个一样加载动态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中处理此操作?

有帮助吗?

解决方案

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

[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

这样,您就不必担心未定义的部分名称,我认为这种样式也更广泛地使用(绝对是FightFix的作用,与我所概述的方式非常相似)。

您可能可以删除 number_of_servers 进入,只使用 count() 功能找到多少 server 那里有部分。

其他提示

有一个可选的 bool 参数允许在 parse_config_file 功能。默认情况下将其设置为false。请参阅此处的文档:

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

如果您调用此功能 true 然后,它将将任何未注册的条目添加到 variables_map 作为字符串。您可以检查它们是否存在 variables_map::count 功能。

我希望这会有所帮助。

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

解决此问题时,我面临的挑战是确保部分保持在一起并且没有混乱。

最后,我依靠options_description使用已知/有限选项,然后使用parse_config_file出现的parsed_options,我不得不收集所有未认识的选项(collect_unrecentized)。然后,我必须迭代它以按顺序选择选项。

感谢每个人的贡献。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top