首页 > 解决方案 > 假设`std::ostream << T()`定义明确,如何为任何T打印std::optional <T>?

问题描述

我正在尝试使用 to 迁移现有的(较大的)代码boost::optionalstd::optional。BOOST 有 optional_io.hpp。std::optional 不存在这样的东西

这也必须与升压单元测试一起使用

标签: c++

解决方案


你可以这样做:

template<typename T>
std::ostream& operator<<(std::ostream& os, std::optional<T> const& opt)
{
    return opt ? os << opt.value() : os;
}

int main()
{
    std::optional<int> oi = 8;

    std::cout << oi << '\n';

    oi.reset();

    std::cout << oi << '\n';

    oi = 5;

    std::cout << oi << '\n';
}

输出:

8

5

仅在存在时打印该值(然后返回流),否则仅返回流。


推荐阅读