当值部分不存在时使用 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 文件的主要内容,如果未能解决你的问题,请参考以下文章