Séparé .h et .fichiers cpp en classe de modèle de mise en œuvre
Je suis en train d'écrire une classe de modèle qui peuvent former des classes en fonction du <class>
je passe. Le problème est que je ne peut pas déclarer et définir dans le même .h
fichier. Dans mon projet, l'UTF outil ne peut fonctionner qu'avec la .cpp
fichiers (pour la couverture de code, etc.). J'ai vu sur un blog qu'ils disent “Ajouter .cpp
au lieu de .h
”. Est-ce recommandé?
Template.h
#ifndef TEMPLATE_H_
#define TEMPLATE_H_
template<class T>
class Template
{
public:
T Add(T a,T b);
};
#endif /* TEMPLATE_H_ */
Template.cpp
#include "Template.h"
template<class T>
T Template<T>::Add(T a, T b)
{
return a+b;
}
Main.cpp
#include "Template.cpp" //Is this a good practise?
#include <iostream>
int main(int argc, char **argv) {
Template<int> obj;
std::cout<<obj.Add(3,4)<<std::endl;
}
Si ce n'est pas conseillé alors comment puis-je résoudre ce problème? export
?
Vous devez vous connecter pour publier un commentaire.
Compilateur doit avoir un accès à la mise en œuvre des méthodes afin d'instancier la classe de modèle, ainsi, la pratique la plus courante consiste à inclure les définitions de modèle dans le fichier d'en-tête qui déclare que le modèle ou à les définir dans les fichiers d'en-tête.
Voir Pourquoi les modèles peuvent être mis en œuvre dans le fichier d'en-tête?
Modèles doivent être définis dans chaque unité de traduction dans lequel ils sont utilisés. Cela signifie qu'ils doivent être définies dans les fichiers d'en-tête. Si votre outil insiste sur l'extension
.cpp
, vous pouvez ainsi fournir, comme vous l'avez fait.Vous n'avez même pas besoin de diviser le pseudo-en-tête dans
.h
et.cpp
dans ce cas. Vous pouvez simplement mettre le tout dans le.cpp
et#include
que.