如何使用boost属性树在ini文件的子部分中获取属性?

如何使用boost属性树在ini文件的子部分中获取属性?,boost,ini,boost-propertytree,ptree,Boost,Ini,Boost Propertytree,Ptree,我正在尝试使用Boost属性树来读取INI文件,这些文件包含具有“组合”路径名的部分中的属性 例如,我的INI文件如下所示: [my.section.subsection1] someProp1=0 [my.section.subsection2] anotherProp=1 我用以下代码阅读: namespace pt = boost::property_tree; pt::ptree propTree; pt::read_ini(filePath, propTree); boost::

我正在尝试使用Boost属性树来读取
INI
文件,这些文件包含具有“组合”路径名的部分中的属性

例如,我的
INI
文件如下所示:

[my.section.subsection1]
someProp1=0

[my.section.subsection2]
anotherProp=1
我用以下代码阅读:

namespace pt = boost::property_tree;

pt::ptree propTree;
pt::read_ini(filePath, propTree);
boost::optional<uint32_t> someProp1 = pt.get_optional<uint32_t>("my.section.subsection1.someProp1");
namespace pt=boost::property\u树;
pt::ptree-propTree;
pt::read_ini(文件路径,propTree);
boost::optional someProp1=pt.get_optional(“my.section.subsection 1.someProp1”);
问题是我从未得到
someProp1
的值


当我在第一个树级别上迭代时,我将整个节名
my.section.subsection1
视为一个键。有没有一种方法可以使
read\u ini
函数将带有点的节名解析为树层次结构?

如果希望属性树反映层次结构,则需要编写自定义解析器。根据INI解析器:

INI是一种简单的键值格式,具有单级剖切。[…]并非所有属性树都可以序列化为INI文件

由于采用单级分区,
my.section.subsection1
必须被视为键,而不是层次结构路径。例如,
my.section.subsection1.someProp1
路径可以分解为:

键分隔符值
.----------^---------. ^ .---^---.
|my.section.Subsection 1 |.| someProp1|
因为“.”是键的一部分,所以必须使用不同的分隔符显式实例化该类型。它以
ptree
上的
path\u type
typedef的形式提供。在这种情况下,我选择使用“/”:


其中example.ini包含:

[my.section.subsection1]
someProp1=0
[我的章节第2小节]
另一个属性=1
以下节目:

#包括
#包括
#包括
int main()
{
名称空间pt=boost::属性树;
pt::ptree-propTree;
读_ini(“example.ini”,propTree);
boost::optional someProp1=propTree.get\u可选(
pt::ptree::path_type(“my.section.subsection 1/someProp1”,“/”);
boost::optional anotherProp=propTree.get\u可选(
pt::ptree::path_type(“my.section.subsection 2/anotherProp”,“/”);

std::我无法感谢您的回复。这(容易)吗是否可以扩展默认INI解析器以反映基于节名称的层次结构?@greydet:我只简单地查看了解析器代码,但它似乎并不太复杂。另一个选项是忽略解析,而是能够将单个级别的
ptree
扩展和/或展平到层次结构的
ptree
 ptree::path_type("my.section.subsection1/someProp1", '/')