【问题标题】: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 = int 和 U... = 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 + sizeof...(U) 中的1)。