Bonjour, je recherche une solution à la situation suivante:
J'ai un classe abstraite A déclarant plusieurs méthodes virtuelle pures, qui me sert d'interface.
J'ai une première classe B dérivant de A et qui gère en interne des ressources qui doivent absolument rester unique dans mon projet.
Et j'ai une seconde classe C, qui implémente différemment l'interface A, mais qui doit se servir des même ressources que B.
Ma première idée (et qui reste ma solution par défaut, si je ne trouve pas mieux), est de faire dériver C de A, et de mettre en relation B et C à l'initialisation, afin qu'elles se partagent la ressource (J'aurai C qui référencera les ressources de B, et B qui en gardera la responsabilité).
Mais comme C partage, non seulement les ressources de B, mais également beaucoup de code interne très proches (plusieurs sous-méthodes privés identiques), j'aurai trouvé plus élégant de faire directement dériver C de B.
La ressource devant rester unique, je n'instancierai dans mon projet qu'un seul objet C, mais j'aimerai en obtenir une seconde référence, qui présenterait l'implémentation de B.
C'est à dire que lorsque je rencontre une fonction prenant un pointeur A, j'aimerai en faire un premier appel qui lancera l'implémentation C (type réel de l'objet instancié) et un second appel qui lancera l'implémentation de B (un de ses types parents).
Butant dans ma réflexion, j'ai testé méthodiquement tous les types de cast (static, dynamic et reinterpret), ainsi qu'avec et sans 'virtual' dans la classe A, mais rien ne m'a permit d'atteindre l'implémentation de B.
A l'intérieur de C, j'arrive à accédé à une méthode de B par B::foo(), mais existe-t-il une syntaxe qui m'aurait échappé, permettant d'obtenir une référence à mon objet C appelant automatiquement l'implémentation de B, lors d'appel de type foo(A* obj) ?
Merci
Partager