::std::initializer_list 与可变参数模板

use*_*108 5 c++ c++17

通过传递多个参数是否::std::initializer_list比可变参数函数模板方法有任何优势?

在代码中:

template <typename T> void f(::std::initializer_list<T> const);

template <typename ...A> void f(A&& ...args);
Run Code Online (Sandbox Code Playgroud)

请注意,A...也可以通过 SFINAE 或将类型限制为单一类型static_assert()。参数可以通过......

Sme*_*eey 3

std::initializer_list您可以以无法遍历参数包的方式迭代 an (除非您有 C++17 并且首先折叠它)。例如,您可以for使用列表进行循环。对于参数包,您扩展它们的唯一选择是通过递归专门定义。

  • 折叠实际上是支持可变参数的一个非常有力的论据。老实说,我对这个功能垂涎欲滴。 (3认同)
  • @user1095108,当然可以。这就是我们多年来一直这样做的方式:)但是折叠是如此......明确。太口齿不清了! (2认同)