为整数序列的每个参数调用一个 void 函数

call a void function for each argument of an integer sequence

我想为 'integer_sequence' 的每个值调用 return 类型为 void 的函数。我尝试使用大括号初始化列表和折叠表达式,但是,有充分的理由,两者都无法编译。有没有办法不用写递归函数就可以实现?

#include <utility>
#include <iostream>
using namespace std;

void foo(int i) { std::cout << i << "\n"; }

template <int...Is>
void fooN(const std::integer_sequence<int, Is...>&&)
{
    // call in sequence: foo(0), foo(1), ..., foo(N-1)
    // void dummy[] = { foo(Is)... };  // use braced initializer list: does not compile
    // (foo(Is)),...;  // use fold expressions:  does not compile
}

int main()
{
    fooN(std::make_integer_sequence<int, 8>{});
    return 0;
}

你很接近,但你的折叠表达式不是没有括号的折叠表达式(并且还有一对不必要的对):

(foo(Is),...);

至于您的虚拟数组尝试,如果您不尝试将 void 存储在数组中,则可以使用逗号运算符来完成:

int dummy[] = { (foo(Is), 0)... }; // An array of 0s