Comment pourrait-on appeler std :: avant sur tous les arguments dans une fonction variadique?
-
26-09-2019 - |
Question
je en train d'écrire une usine d'objet générique et en utilisant le préprocesseur boost méta-bibliothèque pour faire un modèle variadique (en utilisant 2010 et il ne les supporte pas). Ma fonction utilise des références rval et std::forward
à faire le transfert parfait et il a m'a fait réfléchir ... quand C ++ 0X sort et j'avais un compilateur standard je faire avec de vrais modèles variadique. Comment bien, ce que j'appelle 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.
}
Seule façon je peux penser, il faudrait déballer manuellement ... params et je ne suis pas encore tout à fait non plus. Y at-il une syntaxe plus rapide qui fonctionnerait?
La solution
Vous feriez:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
Le ...
assez dit bien « prendre ce qui est à gauche, et pour chaque paramètre de modèle, décompressez en conséquence. »