我想调用一个函数,该函数为'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;
}
答案 0 :(得分:2)
您很亲密,但是fold表达式不是没有括号的fold表达式(并且也有不必要的对):
(foo(Is),...);
对于您的虚拟数组尝试,如果您不尝试将void
存储在数组中,则可以使用逗号运算符来完成:
int dummy[] = { (foo(Is), 0)... }; // An array of 0s