Maison >développement back-end >C++ >Pourquoi les implémentations et les déclarations de classe modèle doivent-elles résider dans le même fichier d'en-tête ?
Problème :
Pourquoi est-il essentiel d'avoir à la fois la mise en œuvre et déclaration d'une classe modèle dans le même en-tête fichier ?
Réponse :
Pour comprendre l'importance de loger l'implémentation et la déclaration d'une classe de modèle dans le même fichier d'en-tête, considérons le processus d'instanciation de modèle.
Le compilateur nécessite un accès à la définition complète du modèle, et pas seulement à la signature, pour générer du code pour chaque instanciation de modèle. Cela signifie que les définitions des fonctions du modèle doivent être incluses dans le fichier d'en-tête.
Exemple :
// header.h template <typename T> class MyTemplate { public: MyTemplate(T n) { value = n; } void setValue(T n) { value = n; } T getValue() { return value; } private: T value; }; // source.cpp #include "header.h" // includes implementation // code that uses the template int main() { MyTemplate<int> obj(10); obj.setValue(5); cout << obj.getValue(); // outputs 5 }
Dans cet exemple, l'implémentation des fonctions MyTemplate est inclus dans l’en-tête. Lorsque le modèle est instancié (par exemple, MyTemplate
En plaçant à la fois l'implémentation et la déclaration dans le même en-tête, vous vous assurez que le compilateur dispose de toutes les informations nécessaires au moment de la compilation pour instancier correctement le modèle pour chaque type spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!