Les fonctions, classes et structures template sont des fonctions, classes et structures qui sont générées à la compilation et qui peuvent fonctionner sur plusieurs types différents.

Fonctions

La fonction qui suit est une fonction template. Elle ne sera pas incluse dans notre exécutable final si on ne l’appelle pas. Elle sera générée pour chacun des types avec lesquels elle est appelée.

template<typename T>
void print_thing(const T &thing)
{
	std::cout << thing << std::endl;
}

On sait que quelque chose est template, dès lors qu’on utilise le mot clé template. Entre chevrons on précise que T dans la déclaration qui suis doit être remplacé par le nom d’un type qui sera donné lors de l’appel de cette fonction.

On peut se servir de cette fonction ainsi :

#include "print_thing.hpp"
int main(void)
{
	int toto = 12;
	std::string str{"hello"};

	print_thing<int>(toto);
	print_thing<std::string>(str);
}

Chacun des appels génère une instance de la fonction print_thing.

On peut préciser le type avec lequel la fonction doit être générée en utilisant des arguments de template, entre chevrons.

En l’occurrence, on pourrait ne pas écrire les argument de template, car ils sont suffisamment évidents pour que le compilateur les devine.

	print_thing(toto);
	print_thing(str);