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
是可选的)。

我想您的意思是使用?