¿Cómo se podría llamar std :: adelante en todos los argumentos en una función variadic?
-
26-09-2019 - |
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?
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."