Curiously recurring template pattern: Difference between revisions

Content deleted Content added
Drudru (talk | contribs)
Drudru (talk | contribs)
Line 26:
};
 
This technique achieves a similar effect to the use of virtual functions, without the costs (and some flexibility) of dynamic polymorphism. This particular use of the CRTP has been called "simulated dynamic binding" by some. This pattern is used extensively in the Windows [[ http://en.wikipedia.org/wiki/Active_Template_Library|ATL ]] and [[ http://en.wikipedia.org/wiki/WTL|WTL ]] libraries.
 
To be more explicit about the above example, let us consider the case where we have a base class with '''no virtual functions'''. Whenever the base class calls another member function, it will always call it's own base class functions. When we inherit from this class, a derived class, we inherit all the member variables and member functions that weren't overridden (no constructors or destructors, of course, either). If the derived class calls an inherited function that then calls another member function, it will never call any derived member functions. As a result of this behaviour, most C++ programmers define member functions as virtual to avoid this problem.