Peu de C++ courant fait un usage intensif des template.
Dans STL1 let T est pourtant pour template… Il n'y a pas de métaprogramme calculant la suite de Fibonacci dans la STL — pas que je sache, du moins :-) — mais comme le C++ est un langage relou où il n'y pas moins de 6 façons2 de passer un argument à une fonction ou de récupérer son résultat et bien il y a tout un système de templates dans la STL qui sert à dire quoi utiliser quand dans quelles circonstances… C'est tellement important que chaque grosse bibliothèque fournit sa propre version — Boost et libG++ par exemple — pour être portable et stable bien comme il faut. Ce type d'information est notamment utilisé dans les systèmes de slots (l'équivalent d'une fermeture en C++ mais ici aussi il y a plus de 6 sortes de fonctions différentes!).
Je ne suis pas spécialiste du langage, mais je pense qu'à chaque fois qu'un template est instantié, l'analyse syntaxique (sinon le mot-clef typename ne servirait à rien) est refaite. De plus les templates sont instantiés beaucoup plus souvent qu'on ne le croit à cause de la surcharge des opérateurs.
La surcharge des opérateurs couplée aux conversions automatiques sont probablement aussi une pénalité pour la vitesse de compilation. Si j'ai 800 classes qui définissent une srucharge de l'opérateur << (pas le décalage de bits mais le stream output) et bien à chaque fois que j'écris s << a pour une classe a qui ne définit pas de surcharge de l'opérateur << et bien le compilateur va essayer de convertir automatiquement a dans l'une des 800 classes en question…
—
1 La bibliothèque standard du C++ pour les profanes.
2 Par copie ou par valeur immédiate (ce qui fait une façon), par référence, par référence constante, par pointeur, par pointeur constant, par pointeur void (cas «détypé»).
[^] # Re: Pas de support C++
Posté par Michaël (site web personnel) . En réponse à la dépêche Sortie de TinyCC 0.9.26. Évalué à 4.
Dans STL1 let T est pourtant pour template… Il n'y a pas de métaprogramme calculant la suite de Fibonacci dans la STL — pas que je sache, du moins :-) — mais comme le C++ est un langage relou où il n'y pas moins de 6 façons2 de passer un argument à une fonction ou de récupérer son résultat et bien il y a tout un système de templates dans la STL qui sert à dire quoi utiliser quand dans quelles circonstances… C'est tellement important que chaque grosse bibliothèque fournit sa propre version — Boost et libG++ par exemple — pour être portable et stable bien comme il faut. Ce type d'information est notamment utilisé dans les systèmes de slots (l'équivalent d'une fermeture en C++ mais ici aussi il y a plus de 6 sortes de fonctions différentes!).
Je ne suis pas spécialiste du langage, mais je pense qu'à chaque fois qu'un template est instantié, l'analyse syntaxique (sinon le mot-clef typename ne servirait à rien) est refaite. De plus les templates sont instantiés beaucoup plus souvent qu'on ne le croit à cause de la surcharge des opérateurs.
La surcharge des opérateurs couplée aux conversions automatiques sont probablement aussi une pénalité pour la vitesse de compilation. Si j'ai 800 classes qui définissent une srucharge de l'opérateur
<<(pas le décalage de bits mais le stream output) et bien à chaque fois que j'écriss << apour une classeaqui ne définit pas de surcharge de l'opérateur<<et bien le compilateur va essayer de convertir automatiquementadans l'une des 800 classes en question…—
1 La bibliothèque standard du C++ pour les profanes.
2 Par copie ou par valeur immédiate (ce qui fait une façon), par référence, par référence constante, par pointeur, par pointeur constant, par pointeur void (cas «détypé»).