Pregunta

Sólo estaba escribiendo una fábrica de objetos genéricos y el uso de los meta-biblioteca impulso preprocesador para hacer una plantilla variadic (utilizando 2010 y que no los admite). Mi función utiliza referencias rval y std::forward hacer reenvío perfecto y me hizo pensar ... cuando C ++ 0X sale y tuve un compilador estándar Me gustaría hacer esto con plantillas variadic reales. ¿Cómo, sin embargo, que yo llamo std::forward en 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 que se me ocurre requeriría desembalaje manual de los parametros ... y no estoy bastante todavía tampoco. ¿Existe una sintaxis más rápido que funcionaría?

¿Fue útil?

Solución

Se podría hacer:

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

El ... más o menos dice "tomar lo que es a la izquierda, y para cada parámetro de plantilla, descomprimirlo en consecuencia."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top