A class template definition must declare the class data and function members, as in the following examples.
template <class Elem> class Array { Elem* data; int size; public: Array( int sz ); int GetSize(); Elem& operator[]( int idx ); }; |
template <unsigned Size> class String { char data[Size]; static int overflows; public: String( char *initial ); int length(); }; |
Unlike function templates, class templates can have both type parameters (such as class Elem) and expression parameters (such as unsigned Size). An expression parameter can be:
A value that has an integral type or enumeration
A pointer or a reference to an object
A pointer or a reference to a function
A pointer to a class member function