capypad
0 Tage Serie
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
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.