Wie Argumente mit abgeleiteten Typen deklariert werden, hängt davon ab, wie Sie das Argument verwenden möchten. In der gezeigten Erklärung erklären Sie das Argument als Forwarding Referenz, die das Template-Argument folgert je nachdem, wie die Funktion aufgerufen wird:
- , wenn die Funktion mit einem L-Wert vom Typ
X
das Argument T
werden aufgerufen X&
- , wenn die Funktion mit einem R-Wert vom Typ
X
das Argument aufgerufen wird, T
X
sein das resultierende Argument ist inte NDED zu sein irgendwo weitergeleitet und die meisten wird wahrscheinlich verwendet mit
std::forward<T>(t)
Wenn Sie lieber Ihr Argument verbrauchen (dh das Argument Grube irgendwo) Sie sind wahrscheinlich abschlagen es von Wert zu nehmen (dh Sie‘ d Verwenden Sie f(T t)
) und std::move(t)
den Wert in sein endgültiges Ziel. Vielleicht möchten Sie das Argument lesen, aber nicht konsumieren. In diesem Fall sollten Sie es als T const&
übergeben.
Angenommen, die Verwendung einer Weiterleitungsreferenz ist beabsichtigt, sollten Sie std::vector
mit einem entsprechenden Typ deklarieren, der aus dem abgeleiteten Typ, z.
std::vector<std::decay_t<T>> v;
Bitte geben Sie eine [MCVE] an, die das Problem erzeugt, das Sie haben. –
benutze ['std :: zerfall '] (http://en.cppreference.com/w/cpp/types/decay) – SirGuy
Danke SirGuy! Es funktionierte! – Dave