Оценка пакета параметров - PullRequest
1 голос
/ 20 октября 2019

Является ли это единственным способом оценки пакета параметров без использования свертывания (поскольку это требует использования операторов)?

#include <iostream>

template<int ...Is, typename Function>
void eval(Function&& f)
{
    // (f(Is)...);
    auto op = [&f](int i){f(i); return 0;};
    auto doNothing = [](auto...){};
    doNothing(op(Is)...);
}

int main()
{
    eval<0,1,2>([](int x){std::cout << x << "\n";});
}

По сути, я хочу сделать (f(Is)...), но по какой-то причине этозапрещено в C ++. Есть ли более элегантный способ, которым это может быть достигнуто, чем с помощью обходного пути, представленного выше?

1 Ответ

7 голосов
/ 20 октября 2019

Существует более простое решение:

#include <iostream>

template<int ...Is, typename Function>
void eval(Function&& f)
{
    (f(Is),...);
}

int main()
{
    eval<0,1,2>([](int x){std::cout << x << "\n";});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...