Bonjour !
Faisons court, faisons simple : J'aurais voulu faire quelque chose comme ceci :
Pour que ce code compile je pourrais écrire le prototype de doFunc en virtual dans A. Mais ça, je ne le peux pas. En effet mes contraintes sont les suivantes:
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 // partie API class A { }; class B : public A { public: void doFunc () { cout << "bla" << endl; } }; // partie Programmeur void func (A& var) { var.doFunc(); } int main () { /* ici pour test, en fait func est appelée par la partie API via un pointeur de fonction. */ B var; func(var); }
- La classe de base A ne peut pas connaître le contenu des classes filles comme B.
- la signature de la fonction func doit être unique.
Un reinterpret_cast<B&>(e) est possible mais ce serait plutôt mal pratique à mon goût (puisque dans la partie Programmeur), je voudrais que la conversion soit transparente à l'utilisateur.
Et je travaille en C++2011
Je trouve dommage que le polymorphisme se limite aux méthodes qui sont déclarées dans le parent, à vrai dire je trouve ça tellement limité que je me demande s'il y a anguille sous roche ?
Merci![]()
Partager