The name of a template class is a compound name consisting of
the template name and the full template argument list enclosed in
angle braces. Any references to a template class must use this
complete name. For example:
template <class T, int range> class ex { T a; int r; // ... }; //... ex<double,20> obj1; // valid ex<double> obj2; // error ex obj3; // error
C++ requires this explicit naming convention to ensure that the appropriate class can be generated.
A template function, on the other hand, has the name of its
function template and the particular function chosen to resolve a
given template function call is determined by the type of the
calling arguments. In the following example, the call min(a,b) is
effectively a call to min(int a, int b), and the call min(af, bf)
is effectively a call to min(float a, float b):
// This example illustrates a template function. template<class T> T min(T a, T b) { if (a < b) return a; else return b; } void main() { int a = 0; int b = 2; float af = 3.1; float bf = 2.9; cout << "Here is the smaller int " << min(a,b) << endl; cout << "Here is the smaller float " << min(af, bf) << endl; }