簡體   English   中英

如何為 std::variant 編寫 operator<<?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM