【问题标题】:Difference between typename parameter pack and auto parameter pack?typename参数包和auto参数包的区别?
【发布时间】:2021-06-02 05:46:09
【问题描述】:

假设我有这 2 个定义。

template<typename... Ts>
struct S{};

template<auto... Ts>
struct S{};

这两个定义有什么区别?
我们什么时候应该选择一个或另一个?

【问题讨论】:

  • template&lt;auto&gt; struct S 仅在 C++17 后可用

标签: c++ c++11 templates variadic-templates


【解决方案1】:

他们有不同的目的,前者允许

S<int, char, float> s;

后者(仅自 C++17 起可用)允许

S<42, '*', 42U> s;

【讨论】:

    【解决方案2】:

    模板有3种parameters

    1. 模板类型参数
    2. 模板非类型参数
    3. 模板模板参数
    template<typename... Ts>
    struct S{};
    

    这里的Ts 是一组type 参数。它接受像S&lt;int, long&gt; 中的数据类型

    template<auto... Ts>
    struct S{};
    

    这里的Ts 是一组非类型 参数,具有占位符 类型。它接受像S&lt;12, 34L&gt; 中的

    auto 允许混合不同类型的值。

    template<int... Ts>
    struct S{};
    

    这类似,但所有值都是固定类型int

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 2016-11-12
      • 2014-12-28
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多