Я просто писал фабрику родового объекта и использовал метабиблиотеку препроцессора повышения для создания шаблона 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.
}
Только способ, которым я могу думать, потребовал бы распаковки руководства... параметрических усилителей, и я не совсем там все же также. Существует ли более быстрый синтаксис, который работал бы?
Вы бы сделали:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
...
в значительной степени говорит "возьмите то, что слева, и для каждого параметра шаблона , распакуйте его соответствующим образом ".