微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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