À partir de différentes comparaisons entre les modèles C ++ et les génériques C # / Java comme celui-ci-
J'ai l'impression que les modèles C ++ sont implémentés par une sorte de prétraitement (remplacement de texte brut avant l'analyse), et non par compilation. Parce que la vérification de type dans les modèles C ++ ressemble aux macros C. Je veux dire, s'il y a des erreurs, ce sont des erreurs du code généré après le traitement des blocs de code modèles, pas des modèles eux-mêmes. En d'autres termes, ils ne sont qu'une sorte de version supérieure des macros en C.
Ensuite, j'ai trouvé d'autres faits à l'appui de cela-
Je pensais que si les modèles C ++ étaient implémentés par prétraitement, il y aurait des problèmes avec la liaison dynamique (en utilisant .dll). Et une recherche rapide sur Google l'a soutenu.
Un autre point est que les constantes entières peuvent être passées comme arguments aux modèles. Et il prend même en charge une sorte de récursivité. Mais cette récursivité n'est pas trouvée dans le code assemblé / machine compilé. La chose récursive est gérée au moment de la compilation en générant une fonction pour chaque appel récursif et en ayant ainsi un binaire exécutable plus grand mais plus rapide.
Bien que contrairement aux macros C, il possède des capacités supérieures. Mais le modèle C ++ n'est-il pas implémenté avec une sorte de prétraitement? Comment est-ce implémenté dans différents compilateurs C ++?