【发布时间】:2021-06-11 16:53:26
【问题描述】:
我已经尝试了在流式传输变体内容时可以找到的所有 sn-p,但在我的特定用例中似乎没有任何效果:
鉴于std::variant<int,std::pair<char, char>> myVar 形式的变体,如何在不明确知道myVar 包含什么的情况下流式传输myVar 的内容。
例如:
#include <iostream>
#include <variant>
typedef std::variant<int,std::pair<char, char>> myVar;
template <typename T>
std::ostream& operator<<(std::ostream& os, std::pair<T, T> &p) {
os << "(" << p.first << ", " << p.second << ")";
return os;
} // This is so we can stream a pair...
/*
...black box to stream variant here...
*/
std::pair<char, char> testPair = {'X','a'};
int testInt = 5;
myVar testVariant = testInt;
std::cout << testVariant << "\n" // Should print 5.
testVariant = testPair;
std::cout << testVariant << "\n" // Should print (X, a).
我用于流式传输变体的任何 sn-p,例如
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;
}
在这种情况下失败并返回以下错误消息:
"Invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'const std::__1::pair<char, char>')" 错误 --- 无论我尝试什么,这就是我得到的全部!
我无法弄清楚这段代码有什么问题。请问有人可以帮我找出并解决这里的问题吗?
boost 等第三方库是绝对不行的。
【问题讨论】:
标签: c++ stream c++17 cout std-variant