Templates, dependance croisée, specialisation
Bonjour,
Je suis entrain de coder un programme ou j'utilise 2 types de données, les entiers et les flottants. Je definit ces 2 types en utilisant des templates car suivant le cas je vais avoir besoin de differents types entiers (int, gmp) et differents types flottants (double, dpe, mpfr). Donc j'ai 2 classes (j'ai zappé les methodes non relevantes):
type_int.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#ifndef Type_int_H
#define Type_int_H
#include "files.h" //(les headers bateaux genre iostream, std...)
using namespace std;
template<class F> class Type_float;
template<class Z> class Type_int{
/*...*/
public:
/*...*/
template<class F> Type_int<Z> & operator=(const Type_float<F>& s);
};
#include "type_int.cpp"
#endif |
et
type_float.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#ifndef Type_float_H
#define Type_float_H
#include "files.h" //(les headers bateaux genre iostream, std...)
#include "type_int.h"
using namespace std;
template<class F>
class Type_float
{
/*...*/
public:
/* */
template<class Z> Type_float<F> & operator=(const Type_int<Z>& s);
};
#include "type_float.cpp"
#endif |
J'ai besoin d'un truc qui me permet de passer de l'un a l'autre, d'ou dépendance croisée entre les 2. j'ai donc mis type_int 'en premier', avec une forward declaration de Type_float pour qu'il me jette pas. type_float.cpp et type_int.cpp incluent tous les 2 les 2 .h, et la méthode qui m'interresse est codée de la meme manière dans les 2. Mais si tout ce passe bien pour Type_float, si je tente de specialiser le '=' de Type_int de la maniere suivante :
Code:
1 2 3 4 5 6
|
template<> template<> inline Type_int<double>& Type_int<double>::operator=(const Type_float<double>& s)
{
data= s.GetData();
return *this;
} |
Je me fait jeter par le compilo :
Code:
1 2 3 4 5 6
|
g++ -c type_int.cpp -o type_int.o -ansi - pedantic -Wall
g++ -c type_float.cpp -o type_float.o -ansi -pedantic -Wall
type_int.cpp: In member function 'Type_int<Z>& Type_int<Z>::operator=(const Type_float<F>&) [with F = double, Z = double]' :
type_int.cpp:179: erreur: invalid use of undefined type 'const struct Type_float<double>'
type_int.h:9: erreur: declaration of 'const struct Type_float<double>' |
Je compile avec g++.real (GCC) 4.1.2.
ça fait des heures que je suis dessus, donc si quelqu'un qui s'y connait mieux que moi a une idée, je suis preneur.
Merci d'avance