当值部分不存在时,使用Boost属性树读取INI文件

时间:2014-09-10 08:05:44

标签: c++ boost boost-propertytree

我正在使用Boost.PropertyTree来读取INI文件:

read_ini( "myIni.ini", pt );
string s=pt.get<std::string>("Section1.value1");

如果section不包含value1记录,则Boost会引发异常。

如何以优雅的方式阅读INI文件,并在s不存在的情况下为Section1.value1提供默认值?

3 个答案:

答案 0 :(得分:3)

使用Boost.Optional

s = pt.get_optional<std::string>("Section1.value1").get_value_or("default");
//     ^^^^^^^^^^^^                                     ^^^^^^^^  ^^^^^^^

答案 1 :(得分:1)

您应该在问题中说明您所指的哪个加速库。答案可在the documentation中找到。

您可以使用get_optional

答案 2 :(得分:1)

您正在使用documentation调用&#34;投掷版本&#34; get()。但是,还有一个&#34;默认值&#34;需要额外参数的版本 - 默认值。作为奖励,通常不需要类型规范,因为类型是从默认值推断出来的。

如果默认值为"default",则只需使用

string s=pt.get("Section1.value1", "default");

其他答案提及使用get_optional(),但这并不是您想要的,因为string s的值不是可选的(即使INI中Section.value1文件是可选的。)