问题描述
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 (将#修改为@)