Problème de cast d'un objet de class dérivant d'un template
Bonjour à tous !
Avec l'architecture suivante
Code:
1 2 3 4 5 6 7
|
class SousClasse
{};
class SousClasseDerivee1 : public SousClasse
{};
class SousClasseDerivee2 : public SousClasse
{}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
class Interface
{};
template<typename T>
class Abstraction : public Interface
{};
class Derivee1 : public Abstraction<SousClasseDerivee1>
{};
class Derivee2 : public Abstraction<SousClasseDerivee2>
{
void someStuff(Derivee1& d);
}; |
Je rencontre le problème suivant
Code:
1 2 3 4 5 6
|
Derivee2::someStuff(Derivee1& d)
{
Interface* brol(this); // <- Pas de problème
Interface* trol(&d); // <- Refuse de compiler
} |
En compilant sous Linux avec g++ 4.8.4, j'obtiens l'erreur suivante :
error: cannot convert 'Derivee1*' to 'Interface*' in initialization
Ok, Derivee1 et Derivee2 n'héritent pas directement de la même classe.
Mais si on remonte jusqu'en haut, les 2 héritent pourtant de Interface -> Pourquoi cette erreur ? (sans compter que g++ arrive à déterminer que Derivee2 est-un Interface)
Si c'est quelque chose qui est interdit par le C++, avez-vous des idées d'architecture permettant de palier ce problème ?
Merci d'avance