C++ 值部分不存在时使用Boost属性树读取INI文件
我正在使用C++ 值部分不存在时使用Boost属性树读取INI文件,c++,boost,boost-propertytree,C++,Boost,Boost Propertytree,我正在使用Boost.PropertyTree读取INI文件: read_ini( "myIni.ini", pt ); string s=pt.get<std::string>("Section1.value1"); read_ini(“myIni.ini”,pt); 字符串s=pt.get(“Section1.value1”); 若节不包含value1记录,则Boost引发异常 如果Section1.value1不存在,如何以优雅的方式读取INI文件并为s提供默认值?使用Bo
Boost.PropertyTree
读取INI文件:
read_ini( "myIni.ini", pt );
string s=pt.get<std::string>("Section1.value1");
read_ini(“myIni.ini”,pt);
字符串s=pt.get(“Section1.value1”);
若节不包含value1
记录,则Boost引发异常
如果
Section1.value1
不存在,如何以优雅的方式读取INI文件并为s
提供默认值?使用Boost。可选:
s = pt.get_optional<std::string>("Section1.value1").get_value_or("default");
// ^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^
s=pt.get_可选(“Section1.value1”)。get_值或(“默认”);
// ^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^
您应该说明您在问题中所指的boost库。答案可以在中找到
您可以使用get\u optional
您使用的是被称为get()
的“抛出版本”。然而,也有一个“默认值”版本,它接受一个额外的参数——默认值。另外,由于类型是从默认值推导出来的,因此通常不需要类型规范
如果默认值是“default”
,则只需使用
string s=pt.get("Section1.value1", "default");
其他答案提到了使用get_optional()
,但这并不是您想要的,因为string s
的值不是可选的(即使INI文件中的Section.value1
是可选的)。我想您的意思是使用?