2011-05-21 4 views
1

Quelqu'un peut-il expliquer cela dans un format simple?Quels sont les modèles en C++

Il existe des fonctions de modèle et des classes de modèle. Quels sont les avantages et les inconvénients? J'ai entendu dire que les modèles sont lents à construire et même à l'exécution?

True?

Thx

+1

documentation Lisez ici http://www.cplusplus.com/doc/tutorial/templates/ il a beaucoup d'exemples. –

+0

[Voici une page FAQ dédiée aux modèles C++] (http://www.parashift.com/c++-faq-lite/templates.html). –

+1

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

Répondre

2

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.

0

Pour résumer le tout:

Si votre écriture d'une fonction add (int a, int b)? Ne serait-il pas agréable que votre ajout puisse le faire pour tous les types de données? Pas seulement int sans avoir besoin de faire plus d'une fonction? C'est là que les modèles entrent en jeu. Ils font en sorte que vous n'avez besoin que d'une seule fonction pour encapsuler plusieurs types.

Ce serait la façon dont vous faites la fonction:

template<typename T> 
T add(T a, T b); 
Questions connexes