可变参数使用声明

问题描述 投票:0回答:1

我正在阅读 Nicolai M. Josuttis 所著的《C++17 - 完整指南》一书。

第 14 章的标题是“使用可变参数 using 声明”。我不明白示例代码:

// Part 1: "inherit" all function call operators of passed based types:
template<typename... Ts>
struct overload : Ts...
{
    using Ts::operator()...;
}

// Part 2: base types are deduced from passed arguments
// >>>> What is it ??
template<typename... Ts>
overload(Ts...) -> overload<Ts...>;

// Part 3
auto twice = overload {
                [](std::string& s) { s += s; }
                [](auto& v) { v *= 2; }
             };

代码由 3 部分组成:

  • 第 1 部分:我知道我们声明了一个类,最终将有 3 个函数调用运算符
  • 第 2 部分:我不明白这个...我们在这里声明什么?你能解释一下语法吗?特别是
    overload(Ts...)
  • 第 3 部分:我们使用聚合初始化来初始化基类函数调用运算符

如果我必须再次阅读之前的章节,请告诉我是哪一章!谢谢。

c++17 variadic-templates
1个回答
0
投票
template<typename... Ts>
overload(Ts...) -> overload<Ts...>;

这是演绎指南。如果在没有显式指定

any
模板参数的情况下实例化类 overload ,则会使用它将。然后它有助于推断类别为
overload<Ts...>

© www.soinside.com 2019 - 2024. All rights reserved.