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