cpp / expert
Snippet
Perfect Forwarding mit std::forward
Perfect Forwarding stellt sicher, dass ein Funktions-Template seine Argumente an eine andere Funktion weitergeben kann, während deren ursprüngliche Value-Category (Lvalue oder Rvalue) erhalten bleibt. Dies wird durch Universal-Referenzen (T&&) und std::forward erreicht.
snippet.cpp
1
2
3
4
5
6
7
template <typename T>void wrapper(T&& arg) {target(std::forward<T>(arg));}// target(int&); // Lvalue// target(int&&); // Rvalue
Erklärung
1
T&& arg
Eine Forward-Referenz (Universal-Referenz), die sowohl an Lvalues als auch an Rvalues gebunden werden kann.
2
std::forward<T>(arg)
Castet das Argument bedingt in ein Rvalue, nur wenn es ursprünglich als Rvalue übergeben wurde.