【问题标题】:deduction guides for std::arraystd::array 的推导指南
【发布时间】:2023-04-04 10:46:02
【问题描述】:

我浏览了 C++ template unique quide 一书,并尝试了解std::array 的推导指南是如何工作的。 关于标准的定义以下是声明

template <class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;

例如,如果在 main 中创建了一个数组

std::array a{42,45,77} 

如何扣除?

谢谢

【问题讨论】:

    标签: c++ templates c++17 variadic-templates template-argument-deduction


    【解决方案1】:

    如何扣除?

    很简单。

    打电话

    std::array a{42,45,77}
    

    匹配

    array(T, U...)
    

    T = decltype(42)U... = decltype(45), decltype(77)T = intU... = int, int

    所以a{42,45,47}的类型变成array&lt;T, 1 + sizeof...(U)&gt;,所以std::array&lt;int, 1 + sizeof...(int, int)&gt;,所以std::array&lt;int, 1 + 2&gt;就是std::array&lt;int, 3&gt;

    换句话说:提取参数的类型;第一个(T)用于给类型数组(第一个模板参数);其他的仅用于计数 (sizeof...(U))。但是,对于模板的第二个参数,重要的是还要计算第一个参数(T 类型,所以1 + sizeof...(U) 中的1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多