J'ai une classe de base que je veux ressembler à ceci:Comment puis-je obtenir un comportement polymorphique dans un constructeur C++?
class B
{
// should look like: int I() { return someConst; }
virtual int I() = 0;
public B() { something(I()); }
}
Le point étant de forcer les classes dérivées de passer outre I
et le forcer à appeler quand chaque objet est construit. Cela sert à faire de la comptabilité et j'ai besoin de savoir quel type d'objet est en cours de construction (mais je traite l'objet actuel comme la classe de base).
Cela ne fonctionne pas car C++ ne vous permet pas d'appeler une fonction virtuelle abstraite du constructeur.
Existe-t-il un moyen d'obtenir le même effet?
Sur la base de this link il semble que la réponse est qu'il n'y a aucun moyen d'obtenir ce que je veux. Cependant ce qu'il dit est:
La réponse courte est: non. Une classe de base ne sait rien de la classe dont elle est dérivée - et c'est une bonne chose aussi.
[...]
En d'autres termes, l'objet ne devient officiellement une instance de Derived1 que lorsque le constructeur Derived1 :: Derived1 commence.
Cependant, dans mon cas, je ne veux pas savoir ce qu'il est mais ce qu'il va devenir . En fait, je ne m'inquiète même pas de ce que je récupère tant que l'utilisateur peut (après coup) le mapper à une classe. Donc, je pourrais même utiliser quelque chose comme un pointeur de retour et s'en tirer avec.
(maintenant à la lecture de ce lien)
Lisez ceci: http://stackoverflow.com/questions/1425695/1426834. Vous pouvez utiliser PIMPL. –