cpp / expert
Snippet
Perfekte Weiterleitung mit variadischen Templates und std::forward
Implementiert 'Perfekte Weiterleitung', um Argumente genau so an einen Konstruktor zu übergeben, wie sie empfangen wurden (unter Beibehaltung des Lvalue/Rvalue-Status). Dies vermeidet unnötige Kopien und ermöglicht Move-Semantik für komplexe Objekte.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
template <typename T, typename... Args>std::unique_ptr<T> create(Args&&... args) {return std::unique_ptr<T>(new T(std::forward<Args>(args)...));}struct Node {Node(int id, std::string name) : id(id), name(std::move(name)) {}int id; std::string name;};auto n = create<Node>(1, "Entity");
Erklärung
1
typename... Args
Definiert ein Template-Parameter-Pack für eine beliebige Anzahl von Argumenten.
2
Args&&... args
Universelle Referenzen (Forwarding-Referenzen), die an jeden Argumenttyp binden können.
3
std::forward<Args>(args)...
Expandiert das Pack und behält dabei die Wertkategorie jedes Arguments bei.