c++ - 假设`std::ostream << T()`定义明确,如何为任何T打印std::optional <T>?
问题描述
我正在尝试使用 to 迁移现有的(较大的)代码boost::optional
库std::optional
。BOOST 有 optional_io.hpp。std::optional 不存在这样的东西
这也必须与升压单元测试一起使用
解决方案
你可以这样做:
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
仅在存在时打印该值(然后返回流),否则仅返回流。
推荐阅读
- javascript - 如何在 jQuery 中使用表单的选择框作为其进度条?
- python - TypeError:字符串索引必须是整数,而其他索引必须是 JSON 集合
- python - asyncio.sleep 不会让我的循环进入睡眠状态?
- visual-studio-code - Visual Studio Code:如何在保存文件时停止显示奇怪的字符
- c# - 如何在运行时以类型安全的方式调用泛型方法
- pandas - Pandas:从截止级别中选择最后四个日期
- python - 我怎样才能让我的播放器在移动的同时还能旋转?
- python - 在一个循环中将值存储在数组中的问题
- android - 创建 TCP 连接时线程停止
- sql - Oracle 查询以查找活动状态记录的开始和结束日期