繁体   English   中英

C ++ 17使用模板参数推导指南继承lambdas集

[英]C++17 Inheriting set of lambdas with template argument deduction guides

我在看std::variant上的文章http://en.cppreference.com/w/cpp/utility/variant/visit

该示例实质上包含以下几行(由我精心修改):

template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

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

代码基本上将列表中的每个lambda函数用作overloaded的struct的基类。 第一行将lambda的operator()拉入结构的范围。 第二行使用类模板参数推导指南 (C ++ 17)。

overloaded后,使用{ }括号无法理解#3行。

哪种C ++机制在这里起作用? 是使用初始化列表并将其转换为可变参数模板参数,还是一种统一/聚合的初始化? 在此行中是否有任何实际的构造函数被调用?

有趣的是,如果我使用( )则构造会失败。

它是聚合的初始化 ,特别是对结果类型的直接公共基础的初始化 从C ++ 17开始,基本子对象本身不必聚合,它们是从初始化程序列表的元素中复制初始化的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM