Шаблон класса C++

Шаблон - это предписание для создания класса, в котором один или несколько типов либо значений параметризованы.

Да - вообще полезно прочитать вступление здесь.
То есть шаблон позволяет нам задать описание класса, использующего тип данных, который можно определить "на ходу" 0при создании класса, а не заранее - как при обычном его описании.
Пример:

template < class Type >
class Queue {
public:
   Queue();
   ~Queue();

   Type& remove();
   void add( const Type & );
   bool is_empty();
   bool is_full();
private:
   // ...
};

У шаблона класса может быть несколько параметров-типов:

template < class T1, class T2, class T3 >
   class Container;

Однако ключевое слово class или typename должно предшествовать каждому. Следующее объявление ошибочно:

// ошибка: должно быть < typename T, class U > или
//                     < typename T, typename U >
template < typename T, U >
   class collection;

а также ещё одна полезная цитата отсюда:

Также typename можно использовать вместо class при описании шаблона. То есть вместо template можно написать template, разницы никакой нет. Но исторически так сложилось, что class употребляется чаще.