boost :: program_options - 如何处理INI文件中具有相同名称的多个部分

时间:2010-12-22 12:16:36

标签: c++ configuration-files ini boost-program-options

在如下配置中;有没有办法处理各个部分。

我正在寻找一种以可靠的方式验证下面各个“服务器”部分的方法。

[basic]
number_of_servers=3

[server]
ip=10.20.30.40
password=sdfslkhf    

[server]
ip=10.20.30.41
password=sdfslkhf

[server]
ip=10.20.30.42
password=sdfslkhf

[server]
password=sdfslkhf

[server]
ip=10.20.30.42

2 个答案:

答案 0 :(得分:13)

使用boost::program_options解析INI文件时,选项名称​​必须以其封闭的部分名称作为前缀。

换句话说,部分是选项'标识符'的一部分,但我认为您无法识别给定server.ip变量所属的部分(以及因此,这是相关的server.password)。

我认为您应该考虑Boost.PropertyTree(也支持INI文件解析)来执行此任务。

答案 1 :(得分:2)

来自here

选项名称是相对于节名称的,因此以下配置文件部分:

  [gui.accessibility]
  visual_bell=yes

相当于

  gui.accessibility.visual_bell=yes

但目前无法区分具有相同名称的部分。

更新:

Qt的QSettings通常通过使用“/ n”从数组中后缀值(section?)来解决这个问题。所以你可以使用:

[server/0]
...
[server/1]
...
[server/2]
...