CRTP — derived class passes itself as template argument.
1template <typename Derived>2class Base {3public:4 void interface() {5 static_cast<Derived*>(this)->implementation();6 }7};89class MyClass : public Base<MyClass> {10public:11 void implementation() { /* ... */ }12};
Benefits:
Use cases:
vs virtual: