【发布时间】:2020-06-11 06:36:17
【问题描述】:
//parameter pack sum example
constexpr int sum(int N= 0)
{
return N;
}
template<typename ...Args>
constexpr int sum(int first, int second, Args ...N)
{
return first + second + sum(N...);
}
int main()
{
std::cout << sum<int>(1,6,3);
}
是否有可能在编译时使用std::initializer_list<int> 得出这个总和,我如何通过这个迭代递归。
【问题讨论】:
-
你这里没有
std::initializer_list<int>。 -
你真的只限于 C++11,(un)folding pack 语法在以后的版本中已经改进了很多。
-
对于编译时,您还需要
constexpr(标准的后续版本也允许更轻松地编写它们)。 -
您能更详细地解释一下 parameter_pack 和 std::initializer_list 之间的区别吗?每个的用例是什么?
-
template<typename ...Args>是参数包,std::initializer_list<T>是 ...initializer_list ;)。呼叫从sum_pack(1, 2, 3, 4, 5)更改为sum_ini({1, 2, 3, 4, 5})。参数包允许非同质类型所以template <typename...Ts> void print(const Ts&...); print(42, "Hi", 5.3);
标签: c++ c++11 metaprogramming initializer-list parameter-pack