Bonjour,
Dans le cadre du d�veloppement d'une biblioth�que, je suis tomb� sur un os assez costaud. Voici une description du probl�me, si quelqu'un a une id�e :
J'ai une classe A qui contient un membre v.
J'ai une classe B qui h�rite de A � un certain niveau (telles que pour b de type B, b.A::v est accessible publiquement).
Je veux �crire une classe template C<T, n> telle que si B h�rite de C<B, n>, alors la construction d'un objet b de type B assigne n � b.A::v.
Pour l'instant, j'ai trouv� la solution suivante :
Ce code fonctionne bien dans la plupart des cas, mais il y a un hic dans le cas d'h�ritage virtuel :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 struct A { int v; }; template<typename D, int n> struct C { C() { D* dhis = static_cast<D*>(this); A* ahis = static_cast<A*>(this); ahis->v = n; } };
En effet, la construction d'une instance de B segfaute.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 // le code précédent struct X: A { virtual ~X() {} }; struct B : virtual X, C<B, 13> {};
Quelqu'un aurait-il une id�e sur un moyen de g�n�raliser ce dispositif ?
Partager