Frage Wie würde man std :: forward für alle Argumente in einer variadischen Funktion aufrufen?


Ich habe gerade eine generische Objektfactory geschrieben und mithilfe der Boost-Präprozessormeta-library eine variadische Vorlage erstellt (mit 2010, die sie nicht unterstützt). Meine Funktion verwendet rval Referenzen und std::forward um perfekte Weiterleitung zu machen und es hat mich zum Nachdenken gebracht ... wenn C ++ 0X herauskommt und ich einen Standard-Compiler hatte, würde ich das mit echten variadischen Vorlagen machen. Wie wäre es, würde ich anrufen? std::forward über 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 würde ich das manuelle Auspacken von ... Params benötigen und ich bin auch noch nicht ganz da. Gibt es eine schnellere Syntax, die funktionieren würde?


76
2018-05-12 17:28


Ursprung


Antworten:


Du würdest:

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

Das ... ziemlich viel sagt: "Nimm, was auf der linken Seite ist, und entpacke es für jeden Template-Parameter entsprechend."


112
2018-05-12 17:31