![](/img/trans.png)
[英]How can I write a function that both input and output is a std::variant
[英]How do I write operator<< for std::variant?
我想為std::variant
編寫operator<<
。 假設只有當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
。
有關此答案的先前版本的問題,請參閱此問題。 已更新此答案以避免該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.