ATTENTION : en creusant le sujet, j'ai trouvé une limite à la solution de pepp. En effet, cela ne fonctionne qu'avec un seul niveau d'héritage. Dès que l'on veut dériver de Deriv (soit DerivDeriv), on retrouve le problème : l'appel à "pure" utilisera l'implémentation de Deriv, et pas DerivDeriv.
En fait, je crois que le problème doit être rapproché de l'histoire du "smart pointer". En gros, on ne manipule pas directement les instances de la famille de Base, mais on passe systématiquement par des classes qui les encapsulent. De mémoire, on passe ici forcément par un template.
Coté code, il faut reprendre le code d'un "smart pointer" et rajouter un appel à l'enregistrement dans Collection.
Cette solution est doublement élégante (AMHA) :
- on évite de faire le contournement et donc de répéter l'appel à init/deinit dans chaque fille,
- le code d'enregistrement dans Collection est extrait de Base pour le mettre uniquement dans le template "smart pointer". On retire donc une dépendance entre Base et Collection.
Je m'arretes là pour les explications. S'il y a besoin de détails, me faire signe.
[^] # Re: Manque d'info
Posté par Bonnefille Guilhem . En réponse au message Pure virtual method called. Évalué à 2.
En fait, je crois que le problème doit être rapproché de l'histoire du "smart pointer". En gros, on ne manipule pas directement les instances de la famille de Base, mais on passe systématiquement par des classes qui les encapsulent. De mémoire, on passe ici forcément par un template.
Coté code, il faut reprendre le code d'un "smart pointer" et rajouter un appel à l'enregistrement dans Collection.
Cette solution est doublement élégante (AMHA) :
- on évite de faire le contournement et donc de répéter l'appel à init/deinit dans chaque fille,
- le code d'enregistrement dans Collection est extrait de Base pour le mettre uniquement dans le template "smart pointer". On retire donc une dépendance entre Base et Collection.
Je m'arretes là pour les explications. S'il y a besoin de détails, me faire signe.