Class Templates
With class templates, we simply write one class and shift
the burden of creating multiple instances of that class to
the compiler.
The compiler automatically generates as many instances of
that class as is required to meet the client's demands
without unnecessary duplication.
Specialized (and partially specialized) template classes can
be used to handle special cases that arise.
The syntax for implementing class templates is similar to
that of defining and declaring classes themselves. We
simply preface the class definition or declaration with the
keyword template followed by a parameterized list of type
dependencies.