The Curiously Recurring Template Pattern
This pattern has a rather curious name: the Curiously Recurring Template Pattern, or CRTP for short. It’s called curious because it is rather odd and unintuitive. The pattern was first described (and its name coined) by James Coplien in a column in the C++ Report in 1995. This pattern is as follows:
- There is a base class template that defines the (static) interface.
- Derived classes are themselves the template argument for the base class template.
- The member functions of the base class call member functions of its type template parameter (which are the derived classes).
Let’s see how the pattern implementation looks in practice. We will transform the previous example with game units into a version using the CRTP. The pattern implementation goes as follows:
template <typename T> struct game_unit { void attack() { static_cast<...