Template é o mecanismo utilizado em C++ para realizar a conversão dinâmica de tipos. Template é um modelo a ser seguido por uma classe ou função. Um modelo de classe define o layout e as operações para um conjunto ilimitado de tipos relacionados. Por exemplo, com o uso de templates, um único modelo de classe List pode ser utilizado para fornecer uma definição comum para listas de “int”, “float” e ponteiros para um objeto qualquer. Um modelo de função define um conjunto ilimitado de funções relacionadas. Por exemplo, um único modelo de função “sort()” pode fornecer uma definição comum para a classificação de todos os tipos definidos pelo modelo de classe List.

No exemplo a seguir, é utilizado o conceito de Template em uma função. Nesse caso a função menor recebe dois parâmetros, ambos do tipo a ser alterado dinâmicamente. O tipo do valor de retorno também é definido dinâmicamente. Para isso é utilizada a palavra reservada do C++: “template <typename T>”. Todas as ocorrências de T na função que inicia logo a seguir a definição “template <typename T>” serão alteradas dinâmicamente de acordo com o solicitado pelas funções que a utilizarem. Stroustrup definiu, originalmente, o uso de “template <class T>”, mas o comitê gestor do C++ adotou “template <typename T>” para evitar ambiguidades. As duas formas são aceitas. No exemplo a seguir, no primeiro cout os dois parâmetros x e y da função menor serão do tipo char. No segundo cout esses mesmos parâmetros serão do tipo int.

O próximo exemplo (função swap_edu) a idéia é semelhante ao exemplo anterior, porém os parâmetros são passados por referência.

O próximo exemplo mostra o uso de conversão dinâmica de tipos em classes. De forma semelhante ao que ocorre em funções, com classes também é necessário utilizar a palavra reservada do C++ template na forma: “Template <class T>” (ou “template <typename T>” ). Todas as ocorrências de T na classe que inicia logo a seguir a defnição “Template <class T>” são alteradas dinâmicamente de acordo com o solicitado.

Notar a importância e flexibilidade introduzida pelo uso de templates no próximo exemplo. Na função main ao serem criadas instâncias da classe Array, uma delas (ia) será um array de inteiros, e a outra um array de floats. O uso de templates possibilita a utilização da mema classe Array com diversos tipos diferentes.