在C ++ 20中访问带有Lambda的std :: variant

问题描述

Cppreference提供了std::visit通过lambda函数访问std::variant的活动成员的示例用法https://en.cppreference.com/w/cpp/utility/variant/visit

示例代码的缩写版本:

#include <iomanip>
#include <iostream>
#include <string>
#include <variant>
 
// helper type for the visitor
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
// explicit deduction guide (not needed as of C++20)
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
 
int main() 
{
    std::variant<int,long,double,std::string> v("hello");

    std::visit(overloaded {
        [](auto arg) { std::cout << arg << ' '; },[](double arg) { std::cout << std::fixed << arg << ' '; },[](const std::string& arg) { std::cout << std::quoted(arg) << ' '; },},v);
}

评论指出,从C ++ 20开始,不需要显式推导指南。考虑到这一点,在使用C ++ 20的情况下,示例代码的外观如何?

仅从示例中省略显式推导指南将无法在GCC 10.2中进行编译。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)