为整数序列的每个参数调用一个 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
我想为 '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