When Should You Use Templates?
Templates are often used to:
Create a type-safe collection class (for example, a stack) that can operate on data of any type.
Add extra type checking for functions that would otherwise take void pointers.
Encapsulate groups of operator overrides to modify type behavior (such as smart pointers).
Most of these uses can be implemented without templates; however, templates offer several advantages:
Templates are easier to write. You create only one generic version of your class or function instead of manually creating specializations.
Templates can be easier to understand, since they can provide a straightforward way of abstracting type information.
Templates are type-safe. Because the types that templates act upon are known at compile time, the compiler can perform type checking before errors occur.