Bonjour,
je dois ajouter de nouvelles fonctionnalité à un code C++.
Ce code utilise une bibliothèque externe LIB, et notamment des instances de LIB::Object.
La classe LIB::Object admet pour attribut un entier info.
Les instances de LIB::Object sont concrètement déclarées en tant qu'Object via un typedef :
Ainsi, j'ai des bouts de code du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef LIB::Object Object;
La classe LIB::Object n'est pas documentée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object instance = LIB::fonction_retournant_une_instance_de_Object(); instance->info() = 1;
En particulier, il n'y a pas d'erreur de syntaxe dans la dernière ligne : il semblerait que le pattern Iterator soit utilisé dans son implementation.
J'ai besoin de pouvoir stocker non plus un entier "info" mais 2 entiers, disons "info" et "data."
Ma première idée a été de remplacer le typedef par classe héritant publiquement de LIB::Object :
Le souci avec cette approche est que je tombe sur un problème de conversion de LIB::Object vers Object à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Object : public LIB::Object { private: int data; };
J'aurais bien ajouté un constructeur et un opérateur d'affectation,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Object instance = LIB::fonction_retournant_une_instance_de_Object();
mais je ne vois pas comment les implémenter sans connaître l'implémentation de LIB::Object, en particulier ses attributs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object(LIB::Object const &); Object & operator=(LIB::Object const &);
Est-ce possible de copier tous les attributs d'une classe mère dans une classe fille de manière automatique?
En solution de contournement, je fais un héritage par composition qui me permet d'automatiser cette tâche mais ce n'est pas super pratique car cela engendre énormément de modifications dans le code.
Merci pour votre aide.
Partager