Bonjour à tous,
J’aimerais utiliser pour mon code du polymorphisme statique.
En effet, nous voulons absolument éviter tout ce qui est méthode virtuelle pour éviter de gréver les perfs (le profiler de Visual nous a indiqué que l'introspection nous faisait perdre beaucoup de temps, nous sommes sur un logiciel où le besoin de perf est très important).
J'ai donc pensé à une architecture classique, du type :
Et pour savoir quel objet je dois instancier, j'ai en entrée, à l'exécution, un char qui m'indique quel type d'objet je dois utiliser.
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 <class T> Base { void f() { (static_cast<T*>this)->f() ; } } Class DerivedA : public Base<DerivedA> { void f() { //Des trucs à faire } } Class DerivedB : public Base<DerivedB> { void f() { //Dautres trucs à faire } }
Je voudrais donc utiliser une sorte de Factory pour créer mes objets. Quelque chose de ce style :
Ainsi je pourrais avoir un code générique dans le main sans avoir de méthode virtuelle, le rêve
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Base* Factory(char code) { Base* obj = NULL; if (code == a) { obj = new DerivedA(); } else if (code == b) { obj = new DerivedB(); } return obj; }
Seulement voilà, je ne peux pas renvoyer de Base* étant donné que Base est templaté, il faut donc que je spécialise…, ce que je ne veux pas faire puisque je veux avoir du code générique. oO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void caller(char c) { Base* obj = Factory(c); obj->f(); delete obj; }
Et j’aimerais en plus éviter l’allocation mémoire (me passer des pointeurs et du new quoi !). En fait je voudrais faire du polymorphisme mais sans pointeur, ce qui semble difficile !
Si vous avez des suggestions à me faire pour ce petit problème d'architecture, je suis preneurMerci.
Partager