c++ - tipos - ¿Cómo se podría llamar a std:: forward en todos los argumentos en una función variadica?
llamadas a funciones en c (1)
Estaba escribiendo una fábrica de objetos genéricos y utilizando la metabiblioteca del preprocesador boost para crear una plantilla variadica (utilizando 2010 y no los admite). Mi función utiliza referencias de rval y std::forward
para hacer un reenvío perfecto y me hizo pensar ... cuando salga C ++ 0X y tuviera un compilador estándar, lo haría con plantillas variadic reales. ¿Cómo, sin embargo, llamaría a std::forward
sobre los argumentos?
template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
y(std::forward(...params)); //? - I doubt this would work.
}
La única forma en que puedo pensar requeriría el desempaque manual de ... params y aún no estoy allí todavía. ¿Hay una sintaxis más rápida que funcionaría?
Tu harías:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
El ...
o menos dice "toma lo que está a la izquierda, y para cada parámetro de plantilla, descomprímelo como corresponda".