【问题标题】:Reading INI file using Boost Property Tree when value section does not exist当值部分不存在时使用 Boost 属性树读取 INI 文件
【发布时间】: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一个默认值?

【问题讨论】:

标签: c++ boost boost-propertytree


【解决方案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 是可选的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 2011-11-15
        • 1970-01-01
        • 2013-09-13
        • 2011-05-30
        相关资源
        最近更新 更多