вызвать функцию void для каждого аргумента целочисленной последовательности - PullRequest
0 голосов
/ 04 марта 2019

Я хотел бы вызвать функцию, которая возвращает тип void для каждого значения 'integer_sequence'.Я пытался использовать фигурные списки инициализаторов и выражения складывания, но, по понятным причинам, ни компилировать.Есть ли способ достичь этого без написания рекурсивной функции?

#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 голосов
/ 04 марта 2019

Вы были близки, но ваше выражение сгиба не является выражением сгиба без скобок (и также содержало ненужную пару):

(foo(Is),...);

Что касается вашей фиктивной попытки массива, возможно, если вы непопробуйте сохранить void в массиве, что можно сделать с помощью оператора запятой:

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