web-dev-qa-db-fra.com

Comment appeler std :: forward sur tous les arguments d'une fonction variadique?

Je venais d'écrire une fabrique d'objets génériques et d'utiliser la méta-bibliothèque de préprocesseur boost pour créer un modèle variadic (en utilisant 2010 et il ne les prend pas en charge). Ma fonction utilise des références rval et std::forward pour faire un transfert parfait et cela m'a fait réfléchir ... quand C++ 0X sort et que j'avais un compilateur standard, je le ferais avec de vrais modèles variadic. Comment pourrais-je appeler std::forward sur les arguments?

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 seule façon dont je peux penser nécessiterait un déballage manuel de ... paramètres et je ne suis pas encore tout à fait là non plus. Existe-t-il une syntaxe plus rapide qui fonctionnerait?

95
Edward Strange

Vous feriez:

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

Le ... dit à peu près "prenez ce qui est à gauche, et pour chaque paramètre de modèle, décompressez-le en conséquence."

134
GManNickG