Désolé pour le titre peu explicite mais je ne sais comment définir mon problème.
J'ai fait un petit exemple qui synthétise un bout de conception
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <iostream> template<class T> class ObjectManager { public: virtual void Manage() { std::cout << "Manage " << T::Str() << std::endl; } }; class A : public ObjectManager<A> { public: static std::string Str(){return "A";} }; class B : public A, public ObjectManager<B> { public: static std::string Str(){return "B";} }; //Let's GO int main () { A& a = *new B(); a.Manage(); return 0; }
- J'ai une classe template "ObjectManager<T>" qui permet d'enregister mes objets dans des conteneurs
- J'ai une classe A qui dérive de "ObjectManager<A>", l'héritage statique permet de faire ce qui est décrit dans le premier point.
- Pour les besoins de ma conception j'ai des classes qui dérivent de A. Dans l'exemple c'est la classe B. Mais j'ai aussi besoin d'enregistrer les objets de type "B" alors je dérive aussi B de "ObjectManager<B>"
Mon problème est décrit dans le main. Comment appeler à partir d'un objet de type dynamique B mais de type statique A, la méthode ObjectManager<B>::Manage() ?
Et à l'inverse comment assurer que l'appel de ObjectManager<B>::Manage() va déclencher l'appel de ObjectManager<A>::Manage().
Voila mon approche, peut-être aussi est-ce une erreur de conception, si vous avez des pistes...
Merci !
Partager