gpt4 book ai didi

c++ - 如何为 std::variant 编写 operator<<?

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

我想写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';
}

Demo

这依赖于将通用 lambda 传递给 std::visit

有关此答案的先前版本的问题,请参阅 this question。此答案已更新以避免该问题。

关于c++ - 如何为 std::variant 编写 operator<<?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893056/

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