Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Next

Boost.Optional

Fernando Luis Cacciola Carballal

根据 Boost 软件许可协议 1.0 版本分发。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt

目录

简介
快速概览
设计概览和原理
参考
建议
依赖性和可移植性
std::optional 的比较
发行说明
致谢

类模板 optional 是一个包装器,用于表示“可选”(或“可空”)对象,这些对象可能(尚未)包含有效值。可选对象提供完整的值语义;它们非常适合按值传递和在 STL 容器内部使用。这是一个仅头文件的 C++11 库。

问题

假设我们想从配置文件中读取一个参数,该参数表示一些整数值,我们称之为 "MaxValue"。这个参数可能未指定;这种情况不是错误。不指定参数是有效的,在这种情况下,程序应该表现得略有不同。此外,假设 int 类型的任何可能值对于 "MaxValue" 都是有效值,因此我们不能仅仅使用 -1 来表示配置文件中缺少该参数。

解决方案

以下是如何使用 boost::optional 解决这个问题的方法

#include <boost/optional.hpp>

boost::optional<int> getConfigParam(std::string name);  // return either an int or a `not-an-int`

int main()
{
  if (boost::optional<int> oi = getConfigParam("MaxValue")) // did I get a real int?
    runWithMax(*oi);                                        // use my int
  else
    runWithNoMax();
}

Next