Question

J'ai une classe qui est définie comme suit:

template <class WidgetType>
class CometWidget : public WidgetType;

Dans une fonction que je fais ceci:

dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();

et il résout le type de CometWidget, exécute et fonctionner correctement.
Le code passe à l'intérieur de la classe CometWidget.

Comment diable cela se produit?
Pourquoi est-ce si? Faut-il même compiler?

Était-ce utile?

La solution

Si elle est à l'intérieur de la déclaration de CometWidget vous n'avez pas besoin de se qualifier explicitement le modèle (ou peu importe le terme que vous utilisez pour dire CometWidget<...>).

Autres conseils

Très intéressant en effet. Il me semble comme un bug du compilateur intéressant.

Il est possible d'en déduire l'argument correct du modèle CometWidget <> - la même façon, vous pouvez déduire les paramètres du modèle d'une fonction de liste d'arguments. Si ce hériterais statique, il serait moins surprenant.

Avec casting dynamique, il y a peu devrait être en commun entre la source et le type de cible. Ainsi, par exemple « deviner » aurait pu se produire, mais ce n'est pas un qui lui revient.

Qu'est-ce que le compilateur est-ce?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top