Подтвердить что ты не робот

Как можно было бы вызвать std:: forward по всем аргументам в вариационной функции?

Я просто писал общий объект factory и использовал мета-библиотеку препроцессора boost для создания вариационного шаблона (с использованием 2010 года, и он не поддерживает их). Моя функция использует ссылки rval и std::forward для идеальной пересылки, и это заставило меня задуматься... когда С++ 0X выходит, и у меня был стандартный компилятор, я бы сделал это с помощью реальных вариационных шаблонов. Как бы я мог называть 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.
}

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

4b9b3361

Ответ 1

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

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

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