Forward declaration avec templates
Bonjour à tous
Je souhaite créer des objets liés entre eux par des pointeurs : A <-> B <-> C
Sans template, pas de problème :
Code:
1 2 3 4 5 6 7
| // forward declaring
struct B; struct C;
// declaring
struct A { B* b; }
struct B { A* a; C* c; }
struct C { B* b; } |
Maintenant, même problème avec de templates :
Code:
1 2 3 4 5 6 7 8 9
| // declaring
template<typename B> struct A { B* b; }
template<typename A, typename C> struct B { A* a; C* c; }
template<typename B> struct C { B* b; }
// specialization
typedef A<B2> A2; // B2 inconnu (error: B2 was not declared in this scope)
typedef B<A2, C2> B2; // C2 inconnu
typedef C<B2> C2; |
Forcement, ça pose problème au niveau compilation puisque B2 et C2 ne sont pas connu dans A2 et B2 respectivement. J'ai essayé d'ajouter avant la spécialisation :
Code:
1 2 3 4
| template<typename T> struct B2;
template<typename T1, typename T2> struct C2;
typedef A<B2> A2; // (error: type/value mismatch at argument 1 in template parameter list for template<typename B> struct A |
Un idée du comment faire ?
Merci