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?

War es hilfreich?

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.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top