2010-12-12 76 views
0

是否有加载动态INI文件的方法,如下所示。带boost的动态配置program_options

[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

你真的在配置文件中存储密码?或者这只是一个微不足道的例子? – 2010-12-19 14:59:48

+0

@Sam;这可能是一个真实的场景;但这是一个例子。你将如何去存储服务访问凭证? – 2010-12-21 11:15:58

回答

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部分。

+0

谢谢约翰;我试图这样做,但我似乎无法得到它的工作。顺便说一句,我寻找QuickFIX,我无法找到任何地方。 – 2010-12-14 23:18:18

+0

你是什么意思,你似乎无法得到它的工作?你有没有放弃或想出另一种解决方案?你的意思是你找不到QuickFIX?谷歌认为它没有问题。 – 2010-12-18 17:45:44

+0

可能是我不得不花更多的时间试图破解这个。我最近重做了我的优先事项;这仍然在我的名单上。对不起,我无法回来。在QuickFIX上,我确实看到了源代码树,但是我无法在那里看到program_options的用法。 – 2010-12-21 11:11:22

0

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

+0

谢谢。不知道如何去做你的建议。我对program_options很新颖。据我所知,我需要在options_description中定义选项,然后才能解析配置文件。这是不对的? – 2010-12-12 23:35:13

0

解决这个问题时我面临的挑战是确保各部分保持在一起并且没有任何混淆。最后,我依赖一个带已知/有限选项的options_description,然后使用来自parse_config_file的parsed_options,我不得不收集所有无法识别的选项(collect_unrecognized)。然后我不得不迭代它来依次选择选项。

感谢每一位的贡献。

相关问题