std :: array

时间:2018-05-20 08:48:29

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

我浏览了C ++模板独特的书籍,我试着理解std::array的演绎指南是如何工作的。 关于标准的定义,以下是声明

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

例如,如果在main中创建为

的数组
std::array a{42,45,77} 

如何进行演绎?

谢谢

1 个答案:

答案 0 :(得分:5)

  

如何进行演绎?

很简单。

致电

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<T, 1 + sizeof...(U)>,所以std::array<int, 1 + sizeof...(int, int)>std::array<int, 1 + 2> std::array<int, 3>

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