Templates are making their way into the programming world in a big way. Many developers restrict their use of templates to implementing collections and smart pointers, but templates are often useful for other purposes as well. In this chapter, we examined a way to employ templates that allow clients to change the behavior of a C++ class simply by passing in a template parameter when the template-based object is created. This capability is a testament to the power and flexibility of C++ when it's used correctly. Now that you're sufficiently grounded in templates, all the ATL source code that we'll sift through in the remainder of the book will make much more sense.