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 ?

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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 07:31:12549parcourir

Why Must Template Class Implementations and Declarations Reside in the Same Header File?

Où héberger la mise en œuvre et la déclaration de la classe de modèles

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), le compilateur peut immédiatement générer le code nécessaire en fonction de la définition complète du modèle.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn