Templates
Templates are a way to define functions or classes that can work for many different types, while still writing them only once.
They do so by having special kinds of parameters—type parameters.
When writing the template code, we can use this type parameter as if it were a real type, such as int or string.
When the templated function is called or the template class is instantiated, the type parameter is substituted with the real type that's used by the calling code.
Now let's look at an example of a template in C++ code:
template<typename T> T max(T a, T b) { if(a>b) { return a; } else { return b; } }
A template always starts with the template keyword, followed by the list of template parameters enclosed in angle brackets.
A template parameter list is a list of comma-separated parameters. In this case, we only have one—typename T.
The typename keyword tells the template that we are writing a templated function that uses a generic type, which we are going to name T...