如何使用boost属性树在ini文件的子部分中获取属性?
我正在尝试使用Boost属性树来读取如何使用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::
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", '/')