Salut!

Voici mon problème:
J'ai une classe Interface (pour l'exemple )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class Interface {
 
// cette fonction doit retourner un pointeur vers un objet "copie" qu'elle a crée
Interface * getIndependentCopy();
};
que j'implémente avec Implementation (toujours pour l'exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
class Implementation : public Interface  {
Implementation * getIndependentCopy();
}
On remarque que getIndependentCopy de Implementation retourne un pointeur de Implementation et non de Interface, mais le compilo et content et moi aussi.

je voudrais utiliser des shared_ptr pour le retour de getIndependentCopy, pour empecher d'avoir de la mémoire allouée dans la nature, sans personne qui ne s'en occupe. Ce code est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
class Interface {
 
// cette fonction doit retourner un pointeur vers un objet "copie" qu'elle a crée
boost::shared_ptr<Interface> getIndependentCopy();
};
 
class Implementation : public Interface  {
boost::shared_ptr<Implementation> getIndependentCopy();
}
mais je reçois alors à la compilation l'erreur "'Implementation ::getIndependentCopy' : overriding virtual function return type differs and is not covariant from 'Interface::getIndependentCopy'

Sans doute du au fait que boost::shared_ptr<Implementation> ne dérive pas de boost::shared_ptr<Interface>???

Est ce que quelqu'un saurait comment faire pour résoudre ce problème?
Merci!