Bonjour,
Voila j'ai une classe de base qui est capable de faire des traitements, et j'aimerai pouvoir ajouter a cette classe des comportements via d'autre classes bien definies (que j'appelle des tags, ou etiquette). Voici comment j'envisage la chose :
J'ai aussi besoin que ces options (qui seront toujours prevues pour une classe de base) puisse acceder aux membres de Base, vu ma strategie, je pars pour ajouter le mot clé friend a chaque fois que je definie une nouvelle classe implémentant Tag
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // une classe de base class Base { std::vector<Tag> myTags; ///< Les options public: void addTag(const Tag& tag); ///< Ajout d'une option void execute(); ///< Ici on itere sur les tags et appelle Tag::onExecute(this) }; // la classe de base qui va modifier le comportement de Base class Tag { public: virtual void onExecute(Base* b) = 0; }; // une classe derivee class Print : public Tag { public: void onExecute(Base* b); ///< Comportement defini, qui affiche par exemple un membre de A };.
Pour donner un exemple pratique de ce que je veux faire, j'ai une classe camera a qui je peux affecter un tag Viser afin qu'elle vise un objet dans une scene, meme lorsqu'il change de position. Ce systeme est inspiré du graphe de scene de l'application cinema4D : http://cgtuts.s3.amazonaws.com/077_C4D_Room2/14.jpg (interface graphique pour ajouter un tag) et http://www.kxcad.net/CINEMA_4D/help/US/html/5749.html (principe de base)
Que pensez vous de tout cela ?
Partager