The Curiously Recurring Template Pattern

Learn to implement the CRTP and unlock its potential to simplify and optimize C++ code.

The pattern discussed in this lesson has a rather curious name: the Curiously Recurring Template Pattern, or CRTP for short. It’s called curious because it’s 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’ll transform the previous example with game units into a version using the CRTP. The pattern implementation goes as follows:

Get hands-on with 1200+ tech skills courses.