| 
 | 16.2.10 TemplatesTemplates--known in other languages as generic types---permit you to write C++ classes which represent parameterized data types. A common application for class templates is container classes. That is, classes which implement data structures that can contain data of any type. For instance, a well-implemented binary tree is not interested in the type of data in its nodes. Templates have undergone a number of changes since their initial inclusion in the ARM. They are a particularly troublesome C++ language element in that it is difficult to implement templates well in a C++ compiler. 
Here is a fictitious and overly simplistic C++ class template that
implements a fixed-sized stack.  It provides a pair of methods for
setting (and getting) the element at the bottom of the stack.  It uses
the modern C++ template syntax, including the new  
 
 C++ permits this class to be instantiated for any type you like, using calling code that looks something like this: 
 
 
An old trick for fashioning class templates is to use the C
preprocessor.  Here is our limited  
 
 
There is a couple of subtleties being used here that should be
highlighted.  This generic class declaration uses the C preprocessor
operator `##' to generate a type name which is unique amongst
stacks of any type.  The  
 
 
The syntax for instantiating a  |