Pregunta ¿Cómo se podría llamar a std :: forward en todos los argumentos en una función variadica?


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 usa referencias de rval y std::forward hacer el reenvío perfecto y me hizo pensar ... cuando salga C ++ 0X y tuviera un compilador estándar, haría esto con plantillas variadic reales. Sin embargo, ¿cómo llamaría? 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 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?


76
2018-05-12 17:28


origen


Respuestas:


Tu harías:

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

los ... más o menos dice "toma lo que está a la izquierda, y para cada parámetro de plantilla, descomprímalo en consecuencia".


112
2018-05-12 17:31