Bonjour !

Faisons court, faisons simple : J'aurais voulu faire quelque chose comme ceci :

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