En C++, vous avez la possibilité de surcharger les fonctions par exemple:
void do_something(object1 ob);
void do_something(int i);
Eh bien, modèles vous permettent de créer des fonctions "génériques" ou des classes qui prennent des types arbitraires. Ainsi, au lieu de définir une fonction chaque fois que vous ajoutez un type, vous pouvez le définir une fois, et laisser le compilateur 'écrire' toutes les fonctions pour vous.
template<typename T>
void do_something(T arg);
Avec les classes, vous créez des variantes en fonction des différences de type. Le meilleur exemple que je puisse penser est std :: vector .. vous pouvez le considérer comme un container/array/quoi que ce soit. Mais vous devez définir l'avance de type (il sait la taille de chaque élément est, comment copier chaque élément, etc.):
std::vector<int> vector_of_ints;
std::vector<std::string> vector_of_strings;
...
Parce que ce qui se passe, en effet, est le compilateur écrit les fonctions supplémentaires Pour vous, au moment de la compilation, il ne devrait pas y avoir d'effet d'exécution. Le problème au moment de l'exécution peut cependant survenir, où vous avez tellement de code de modèle, ce qui conduit à gonfler le code, et cela pourrait mener à des échecs de cache d'exécution ... mais sur le matériel actuel, cela ne devrait pas poser de problème.
Le principal inconvénient que je vois est que vous devez mettre des modèles, généralement, dans le fichier d'en-tête qui expose votre implémentation. Je les trouve également plus difficiles à déboguer, car ils peuvent créer des messages d'erreur de compilateur assez salissant.
documentation Lisez ici http://www.cplusplus.com/doc/tutorial/templates/ il a beaucoup d'exemples. –
[Voici une page FAQ dédiée aux modèles C++] (http://www.parashift.com/c++-faq-lite/templates.html). –
Je ne comprends pas pourquoi cette question était close. Il demande simplement "quels sont les modèles et pourquoi/pourquoi ne sont-ils pas une bonne idée?". – Bingo