A Template in C++ is a mold for an algorithm along with the template function that can operate on a generic datatype, which will allow you to use the same function on many different types of data. The T in template< class T > is a generic datatype.
Template class is an entire class that operates on a generic datatype. You also have to be careful what you name the generic class and regular class, Example: if you have a generic class named myGeneric and a regular class also named myGeneric, then you are going to get errors. A non-templated class organization tends to be messy because you almost never have all of the classes in the same file. Templates do not have to be based on a single generic datatype so you can have parameterized datatypes.
The compiler analyzes the datatypes that are passed into the function and creates the appropriate template based on the return value. C++ also allows you to use values of a particular datatype. Template classes with different value parameters are considered totally different types, also doubles are twice as large as ints.
A value parameter could be of a generic datatype. Templates though are limited. If you try to program templates in the way using .h and .cpp files in MSVC6, it will give you errors.
C++ goes through the template definition, copies the code, and replaces every instance of the parameterized type name with the actual type name. The compiler performs the copying for you automatically when you compile the program so that you don’t have to do it manually.
A template is nothing more than a copied-and-pasted bunch of code, the compiler does all the work for you. Therefore, you can write a really fast algorithm and have it run at full speed for every datatype you want.
For me, templates at first was a little bit confusing. But after some research and time put into it, they are becoming easier and easier.
Data Structures for Game Programmers: Ron Penton and Andre LaMothe, pp. 14-36