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

时间:2019-03-04 06:34:13

标签: c++ templates c++17 variadic-templates

我想调用一个函数,该函数为'integer_sequence'的每个值返回void类型。我尝试使用大括号的初始值设定项列表和fold表达式,但是由于充分的原因,它们均未编译。有没有一种方法,而无需编写递归函数?

#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;
}

1 个答案:

答案 0 :(得分:2)

您很亲密,但是fold表达式不是没有括号的fold表达式(并且也有不必要的对):

(foo(Is),...);

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

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