C++ 可变参数模板 : elegant way of listing all array elements depending on variadic template size

标签 c++ variadic-templates

是否有一些优雅的方式来表达函数调用,具体取决于可以从模板参数派生的一些n

f(my_array[0], ... , my_array[n-1]);

在类模板中看起来像这样?:

template <int... numbers>
class Abraham {
   static constexpr std::size_t n = sizeof...(numbers);
   some_type my_array[n];

   void foo(){
   //...
   f(my_array[0], ... , my_array[n-1]); // This line is no valid C++ Code. How can one achieve this in an elegant way?
   //...
   }
}

最佳答案

标准库有std::index_sequence对于这种事情

template <size_t... Is>
void foo(std::index_sequence<Is...>) {
  f(my_array[Is]...);
}
void foo() {
  foo(std::make_index_sequence<n>{});
}

演示:https://godbolt.org/z/zhbGdb

关于C++ 可变参数模板 : elegant way of listing all array elements depending on variadic template size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64952858/

相关文章:

c++ - 使用带有参数包扩展和附加值的静态存储持续时间初始化 std::array

c++ - 错误 : Variadic template class has incomplete type

c++ - 无法推导成员函数包装器的返回类型

c++ - 图中的 MST 相关边

c++ - OpenGL:各向异性过滤纹理将使用多少内存?

c++ - 如何使用指向友元函数的指针作为成员函数的参数

c++ - 以下包扩展有什么问题?

c++ - 可变模板参数解包

c++ - Zlib 用法 - deflateEnd() 错误

c++ - 连接两个 BSTR 的最佳方法是什么?