cpp / expert
Snippet
C++23 Explizite Objektparameter (Deduced This)
C++23 führte 'deduced this' ein, wodurch Elementfunktionen 'this' als expliziten Parameter entgegennehmen können. Dies vereinfacht das Schreiben von Code, der von der Value-Category (lvalue/rvalue) oder den cv-Qualifikatoren des aufrufenden Objekts abhängt, ohne Funktionen duplizieren zu müssen.
snippet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>#include <typeinfo>struct Logger {template <typename Self>void log_type(this Self&& self) {std::cout << "Called on type: " << typeid(Self).name() << "\n";}};int main() {Logger l;l.log_type(); // Deduces Logger&std::move(l).log_type(); // Deduces Logger&&}
Erklärung
1
void log_type(this Self&& self)
Das Schlüsselwort 'this' vor dem ersten Parameter macht diesen zu einem expliziten Objektparameter.
2
template <typename Self>
Self wird auf den exakten Typ und die Value-Category des Objekts abgeleitet, auf dem die Funktion aufgerufen wird.