Thou cunning’st pattern of excelling nature.
Templates are a relatively new addition to C++. They allow you to write generic classes and functions that work for several different data types. The result is that you can write generic code once and then use it over and over again for many different uses. In fact, C++ comes with something called the Standard Template Library (STL), which makes extensive use of templates to provide powerful data-processing tools to the C++ user.
There are some problems with templates, however. Working out the implementation details was very difficult for the people on the C++ Standards Committee. There was a lot of hard fighting involving tanks, mortars, and heavy artillery (or the academic equivalent, which is a tartly worded memo). As a result, template implementation details were one of the last items in the C++ Standard to be agreed upon. Later in this chapter, we’ll discuss some of the implementation problems with templates.
Suppose we want to define a function
return the maximum of two items. Actually, we don’t want to define
max function, but a family
of functions: one to find the maximum of two
ints, one for floats, one
for chars, and so on.
We start by defining a parameterized macro to generate the code for the function. This is called the definition stage . The macro looks like this:
#define define_max(type) type max(type d1, type d2) ...