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 :
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
};
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 .

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 ?