Je dois appeler une méthode virtuelle pour toutes les classes dérivées d'une classe de base de base donnée juste après la construction de l'objet dérivé. Mais le faire dans le constructeur de la classe de base se traduira par un pur appel de méthode virtuelleMéthode virtuelle d'appel immédiatement après la construction
Voici un exemple simplifié:
struct Loader {
int get(int index) { return 0; }
};
struct Base{
Base() {
Loader l;
load(l); // <-- pure virtual call!
}
virtual void load(Loader &) = 0;
};
struct Derived: public Base {
int value;
void load(Loader &l) {
value = Loader.get(0);
}
};
Je peux appeler load
au constructeur Derived
, mais Derived
ne pouvait pas savoir comment pour créer un chargeur. Des idées/solutions de contournement?
Quel est le problème? Vous pouvez appeler une méthode virtuelle pure. –
@Benoit: Pas dans un constructeur. @Vargas: Il peut probablement être mieux conçu, donc vous n'avez pas cette dépendance. Par exemple, pourquoi 'load' est une fonction séparée qui est appelée dans le constructeur? Pourquoi ne pas laisser Derived charger ses propres valeurs. – GManNickG
@Benoit: Du constructeur? !!! C'est ce qu'on appelle le comportement indéfini en C++ –