Upside-down inheritance is a technique for specifying the base class of base classes by using template arguments. MultipleInheritance is used heavily. Delegation is implemented via MixIn classes. http://www.apostate.com/programming/atlupsidedown.html (https://web.archive.org/web/20060315072824/http://www.apostate.com/programming/atlupsidedown.html) BrokenLink 20080522 with the following curious error message: ''Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.'' This mechanism is used to implement the ActiveTemplateLibrary and the WindowsTemplateLibrary on top of it. The advantages over the MicrosoftFoundationClasses are: * Small - only the code used in a final instantiation of your derived classes are compiled into your program, as opposed to the multi-megabyte MFC libraries and DLLs * Fast - template instantiation rather than virtual methods are used to override behavior, allowing more aggressive compiler optimization * Flexible - the existing class hierarchy can be redefined through the template arguments ** Complexity is the downside. The user must also be aware of dependencies between sibling classes. ---- See also CuriouslyRecurringTemplate ---- CategoryCpp CategoryCppTemplates