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
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.