Как был бы один станд. вызова:: передать на всех аргументах в функции variadic?

Я просто писал фабрику родового объекта и использовал метабиблиотеку препроцессора повышения для создания шаблона variadic (использующий 2010, и она не поддерживает их). Моя функция использует rval ссылки и std::forward чтобы сделать идеальная передача и это получили меня думающий..., когда C++ 0X выходит, и у меня был стандартный компилятор, я сделаю это с реальными шаблонами variadic. Как, хотя, был бы я звонить std::forward на аргументах?

template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
    y(std::forward(...params)); //? - I doubt this would work.
}

Только способ, которым я могу думать, потребовал бы распаковки руководства... параметрических усилителей, и я не совсем там все же также. Существует ли более быстрый синтаксис, который работал бы?

101
задан PraAnj 4 September 2018 в 09:45
поделиться

1 ответ

Вы бы сделали:

template <typename ...Params>
void f(Params&&... params)
{
    y(std::forward<Params>(params)...);
}

... в значительной степени говорит "возьмите то, что слева, и для каждого параметра шаблона , распакуйте его соответствующим образом ".

141
ответ дан 24 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: