capypad
0 Tage Serie
cpp / expert
Snippet

Das Curiously Recurring Template Pattern (CRTP)

CRTP ist eine Technik, bei der eine Klasse von einer Template-Instanziierung erbt, die sie selbst als Argument verwendet. Dies ermöglicht statischen Polymorphismus (Dispatch zur Kompilierzeit) und vermeidet den Overhead von virtuellen Methodentabellen (VTable).

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
template <typename Derived>
class Base {
public:
void interface() {
static_cast<Derived*>(this)->implementation();
}
};
 
class Derived : public Base<Derived> {
public:
void implementation() { /* ... */ }
};
Erklärung
1
static_cast<Derived*>(this)
Castet den Basis-Pointer auf den abgeleiteten Typ, um zur Kompilierzeit auf spezifische Implementierungen zuzugreifen.
2
class Derived : public Base<Derived>
Der 'Curiously Recurring'-Teil: Die Klasse übergibt sich selbst an ihre eigene Basis.