143 votes

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

J'étais en train d'écrire un objet générique de l'usine et en utilisant le boost de préprocesseur méta-bibliothèque pour faire une variadic template (à l'aide de 2010 et il ne les supporte pas). Ma fonction utilise rval références et std::avant de faire le transfert parfait et il m'a fait penser...quand C++0X vient de sortir et j'ai eu un compilateur standard, je le ferais avec de véritables variadic templates. Comment pourrait-je appeler std::forward sur les arguments?



Seule façon que je peux penser de nécessiterait manuel déballage de ...params et je ne suis pas tout à fait là encore. Est-il plus rapide de la syntaxe qui fonctionne?

210voto

GManNickG Points 155079

Vous feriez:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X