Given the following template:
template<class L> class Key { L k; L* kptr; int length; public: Key(L); // ... };
The following table shows what the classes Key<int>, Key<
char*>, and Key<mytype> look like:
/------------------------------------------------------------------------------\ | class Key<int> i; | class Key<char*> c; | class Key<mytype> m; | |-------------------------+--------------------------+-------------------------| | class Key<int> { | class Key<char*> { | class Key<mytype> { | | int k; | char* k; | mytype k; | | int * kptr; | char** kptr; | mytype* kptr; | | int length; | int length; | int length; | | public: | public: | public: | | Key(int); | Key(char*); | Key(mytype); | | // ... }; | // ... }; | // ... }; | \------------------------------------------------------------------------------/
The declarations create the following objects:
Note that these three classes have different names. The types contained
within the angle braces are not arguments to the class names, but part
of the class names themselves. Key<int> and Key<char*> are class
names. Within the context of the example, a class called Key (with no
template argument list) is undefined.