The relationship between a class template and an individual class is like the
relationship between a class and an individual object. An individual
class defines how a group of objects can be constructed, while a class
template defines how a group of classes can be generated.
Note the distinction between the terms class template and template class:
A template definition is identical to any valid class definition that the template might generate, except for the following:
template< template-parameter-list >
where template-parameter-list is a comma-separated list of one or more of the following kinds of template parameters:
A class template can be declared without being defined by using an elaborated type specifier. For example:
template<class L,class T> class key;
This reserves the name as a class template name. All template declarations for a class template must have the same types and number of template arguments. Only one template declaration containing the class definition is allowed.
template<class L,class T> class key { /* ... */}; template<class L> class vector { /* ... */ }; int main () { class key <int, vector<int> > my_key_vector; // implicitly instantiates template }
Objects and function members of individual template classes can be accessed by any of the techniques used to access ordinary class member objects and functions. Given a class template:
template<class T> class vehicle { public: vehicle() { /* ... */ } // constructor ~vehicle() {}; // destructor T kind[16]; T* drive(); static void roadmap(); // ... };
and the declaration:
vehicle<char> bicycle; // instantiates the template
the constructor, the constructed object, and the member function
drive() can be accessed with any of the following (assuming the
standard header file <string.h> is included in the
program file):
constructor |
vehicle<char> bicycle; // constructor called automatically, // object bicycle created |
object bicycle |
strcpy (bicycle.kind, "10 speed"); bicycle.kind[0] = '2'; |
function drive() | char* n = bicycle.drive(); |
function roadmap() | vehicle<char>::roadmap(); |
Related References