Mixins are small classes that are designed to add functionality to other classes. If you read about mixins, you will often find that the curiously recurring template pattern is used to implement mixins in C++. This is an incorrect statement. The CRTP helps achieve a similar goal to mixins, but they are different techniques. The point of mixins is that they are supposed to add functionality to classes without being a base class to them, which is the key to the CRTP pattern. Instead, mixins are supposed to inherit from the classes they add functionality to, which is the CRTP upside down.
Remember the earlier example with knights and mages that could move forth and back with the
step_back member functions? The
mage classes were derived from the
movable_unit class template that added the functions
retreat, which enabled units to move several steps forth or back. The same example can be implemented using mixins in a reverse order. Here is...