déduction modèle dans dynamic_cast
-
23-09-2019 - |
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?
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?