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

Posted

技术标签:

【中文标题】当值部分不存在时使用 Boost 属性树读取 INI 文件【英文标题】:Reading INI file using Boost Property Tree when value section does not exist 【发布时间】:2014-09-10 08:05:43 【问题描述】:

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

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

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

如果Section1.value1不存在,如何优雅地读取INI文件并给s一个默认值?

【问题讨论】:

我猜你的意思是你使用Boost Property tree library? 【参考方案1】:

使用Boost.Optional

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

【讨论】:

【参考方案2】:

您应该在问题中说明您指的是哪个 boost 库。答案在the documentation。

您可以使用get_optional

【讨论】:

【参考方案3】:

您正在使用documentation 所谓的get() 的“抛出版本”。但是,还有一个“默认值”版本,它需要一个额外的参数——默认值。作为奖励,通常不需要类型说明,因为类型是从默认值推导出来的。

如果默认值为"default",那么您只需使用

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

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

【讨论】:

以上是关于当值部分不存在时使用 Boost 属性树读取 INI 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 boost 属性树遍历 json 属性键和值

使用 Boost 的属性树添加 XML 标头 [重复]

如何使用 boost 属性树提取 xml 文件的 DOCTYPE 节点?

提升属性树性能

仅当值不存在时才使用 lodash 推送到数组?

如何使用柯南安装 Boost 属性树?