gpt4 book ai didi

c++ - 如何流式传输 std::variant<...,...>

转载 作者:可可西里 更新时间:2023-11-01 18:27:52 27 4
gpt4 key购买 nike

我的 std::variant包含可流类型:

std::variant<int, std::string> a, b;
a = 1;
b = "hi";
std::cout << a << b << std::endl;

使用 -std=c++1z 编译 g++7 会返回编译时错误。

节选:

test.cpp: In function 'int main(int, char**)':
test.cpp:10:13: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'std::variant<int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >')
std::cout << a << b << std::endl;
~~~~~~~~~~^~~~

看似一个std::variant<int, std::string>无法流式传输。我怎样才能实现我可以直接将变体流式传输到输出流?

预期输出:

1hi

最佳答案

这也会流式传输嵌套变体。

template<class T>
struct streamer {
const T& val;
};
template<class T> streamer(T) -> streamer<T>;

template<class T>
std::ostream& operator<<(std::ostream& os, streamer<T> s) {
os << s.val;
return os;
}

template<class... Ts>
std::ostream& operator<<(std::ostream& os, streamer<std::variant<Ts...>> sv) {
std::visit([&os](const auto& v) { os << streamer{v}; }, sv.val);
return os;
}

用作:

std::cout << streamer{a} << streamer{b} << '\n';

关于c++ - 如何流式传输 std::variant<...,...>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com