It’s possible to understand the concept of a stack (a data structure into which we insert items only at the top and retrieve those items only from the top in last-in, first-out order) independent of the type of the items being placed in the stack. However, to instantiate a stack, a data type must be specified. This creates a nice opportunity for software reusability—as you already saw with the stack
container adapter in Section 15.7.1. Here, we define a stack generically then use type-specific versions of this generic stack class.
Software Engineering Observation 18.1
Class templates encourage software reusability by enabling a variety of type-specific class-template specializations to be instantiated from a single class template.
Class templates are called parameterized types, because they require one or more type parameters to specify how to customize a generic class template to form a class-template specialization. To produce many specializations you write only one class-template definition (as we’ll do shortly). When a particular specialization is needed, you use a concise, simple notation, and the compiler writes the specialization source code. One Stack
class template, for example, could thus become the basis for creating many Stack
class-template specializations (such as “Stack
of double
s,” “Stack
of int
s,” “Stack
of Employee
s,” “Stack
of Bill
s,” etc.) used in a program.
Common Programming Error 18.1
To create a template specialization with a user-defined type, the user-defined type must meet the template’s requirements. For example, the template might compare objects of the user-defined type with < to determine sorting order, or the template might call a specific member function on an object of the user-defined type. If the user-defined type does not overload the required operator or provide the required functions, compilation errors occur.
3.129.218.69