Wie würde man std :: rufen nach vorn auf alle Argumente in einer variadische Funktion?
-
26-09-2019 - |
Frage
Ich schreibe nur eine generisches Objekt Fabrik und mit Hilfe der Boost-Präprozessor Meta-Bibliothek eine variadische Vorlage machen (mit 2010 und es nicht unterstützt). Meine Funktion verwendet rval Referenzen und std::forward
perfekte Weiterleitung zu tun, und es hat ich denken ... wenn C ++ 0X kommt heraus und ich hatte einen Standard-Compiler, den ich dies mit echten variadische Vorlagen tun würde. Wie aber würde ich nenne std::forward
auf die Argumente?
template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
y(std::forward(...params)); //? - I doubt this would work.
}
Nur so, wie ich denken kann, manuelles Entpacken ... params erfordern würde, und ich bin nicht ganz dort entweder noch. Gibt es eine schnellere Syntax, die funktionieren würde?
Lösung
Sie tun würde:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
Die ...
ziemlich sagt viel „nehmen, was auf der linken Seite ist, und für jedes Template-Parameter, entpacken Sie es entsprechend.“