作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想写operator<<
对于 std::variant
.假设是 operator<<
对于特定变体,只有在 operator<<
时才有效对变体可以包含的所有类型都有效。
最佳答案
//g++ (GCC) 7.2.0
//g++ -std=c++1z -O2 -Wall -pedantic -pthread main.cpp
#include <iostream>
#include <string>
#include <variant>
#include <complex>
template<typename T, typename... Ts>
std::ostream& operator<<(std::ostream& os, const std::variant<T, Ts...>& v)
{
std::visit([&os](auto&& arg) {
os << arg;
}, v);
return os;
}
int main()
{
using namespace std::complex_literals;
std::variant<int, std::string, double, std::complex<double>> v = 4;
std::cout << v << '\n';
v = "hello";
std::cout << v << '\n';
v = 3.14;
std::cout << v << '\n';
v = 2. + 3i;
std::cout << v << '\n';
}
这依赖于将通用 lambda 传递给 std::visit
。
有关此答案的先前版本的问题,请参阅 this question。此答案已更新以避免该问题。
关于c++ - 如何为 std::variant 编写 operator<<?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893056/
我是一名优秀的程序员,十分优秀!