如何解决在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 举报,一经查实,本站将立刻删除。