Je viens de commencer à coder et le problème des templates me rattrape encore :/ Sale crasse ce truc sur un vieux g++
Serialize.hSerialize.cppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #ifndef SERIALIZE_MAIN_ #define SERIALIZE_MAIN_ #include "iostream.h" #include "stdlib.h" #include "fstream.h" class Serialize { public: Serialize(const char * nomFichier, int tailleSegment=0); template <class B> void operator<<(const B & b) { cerr<<"Operateur d'insert"<<endl; } private: int _tailleSegment; Serialize(); }; #endif
Mais mon prof ne trouve vraiment pas ça joli d'avoir une fonction implémentée dans un .h... seule fonction template de tout ma classe :evilred:Code:
1
2
3
4
5 #include "Serialize.h" Serialize::Serialize(const char * nomFichier, int tailleSegment) { cerr<<"[SERIALIZE] Constructeur"<<endl; }
J'essaye ceci:
Serialize.hSerialize.cppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef SERIALIZE_MAIN_ #define SERIALIZE_MAIN_ #include "iostream.h" #include "stdlib.h" #include "fstream.h" class Serialize { public: Serialize(const char * nomFichier, int tailleSegment=0); template <class B> void operator<<(const B & b); private: int _tailleSegment; Serialize(); }; #endif
Mais je suis obliger d'instancier mes templates ainsi:Code:
1
2
3
4
5
6
7
8
9
10
11
12 #include "Serialize.h" Serialize::Serialize(const char * nomFichier, int tailleSegment) { cerr<<"[SERIALIZE] Constructeur"<<endl; } template <class B> void Serialize::operator<<(const B & b) { cerr<<"[SERIALIZE] <int> Operateur d'insertion"<<endl; } //Problème ici !! template void Serialize::operator<<(const int & b);
Car sinon mon main me répond:Code:template void Serialize::operator<<(const int & b);
C'est moche ... quel est l'interet des templates alors ?Code:undefined reference to `void Serialize::operator<< <int>(int const&)
Comment concerver la séparation .h/.cpp
sachant que le compilateur que j'ai à l'école est incapable de faire de l'instentiation automatique... donc il compile le template et puis arriver au main il ne va plus voir le template qui est compilé une seule et unique fois et se crache comme un c** à l'édition des liens. Je par à la recherche d'un mécanisme de manière à forcer une recompilation...