Quelle est la raison pour laquelle l’intégralité du code C ++ STL est incluse dans les fichiers .h plutôt que dans les fichiers .cpp / .c?

Je viens de télécharger le code source STL et j’ai remarqué que toutes les définitions des classes de modèles STL sont incluses dans le fichier .h. Le code source réel de la définition de fonction se trouve dans le fichier .h plutôt que dans le fichier .cpp / .c. Quelle est la raison pour ça?

http://www.sgi.com/tech/stl/download.html

Parce que très peu de compilateurs implémentent la liaison de modèles. C’est dur.

Voici un article bref mais informatif à ce sujet: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=53

Je dis “je pense” parce que ce n’est pas vraiment quelque chose que je connais très bien, à part que c’est largement non implémenté. Au départ, je disais que la norme ne l’exigeait pas, mais si l’on se base sur la définition du terme “export” en C ++ 03, rien n’indique qu’elle soit facultative. Peut-être que c’est juste une norme ratée.

Pensez aux modèles comme à la génération de code. Si vous ne savez pas à l’avance quel modèle sera utilisé, vous ne pourrez pas comstackr. Vous devez donc conserver l’implémentation dans l’en-tête.

Cela permet une certaine intégration et cela explique pourquoi parfois, utiliser des éléments basés sur un modèle (comme std :: sort) fonctionne plus rapidement que dans le langage C.