Include et template/inline
Bonjour,
J'ai toujours utilisé les fichiers .h pour déclarer mes classes C++ et les fichiers .cpp pour le code source. Pour les classes qui utilisent les templates et les méthodes inlines: où faut-il mettre le code source ? :
- Dans les fichiers .cpp: ça ne fonctionne pas
- Dans les fichiers .h: on n'y met que de la déclaration, pas du code source
J'ai parfois vu ceci:
classA.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef CLASS_A_H
#define CLASS_A_H
#include <vector>
//ici, tous les autres include
template<class T> class classA
{
public:
classA();
};
#include "classA.inl"
#endif |
classA.inl:
Code:
1 2 3 4
| template<class T> inline classA<T>::classA()
{
//du code source ici
} |
Ca fonctionne bien et ça me semble assez logique.
Mon problème:
J'ai deux classes: A et B qui sont toutes les deux des templates. La classe A à besoin de la class B, j'ajoute donc un '#include "B.h"' dans le fichier 'A.h'.
Jusque là pas problème. Maintenant imaginons que la classe B à aussi besoin de la classe A: je ne peux pas ajouter un '#include "A.h"' (include cyclique).
Comment faire ?
Info: la solution proposé ici ne fonctionne pas pour la classe template/inline: http://cpp.developpez.com/faq/cpp/?p...erence_croisee
Merci d'avance