Dedução de modelo em dynamic_cast
-
23-09-2019 - |
Pergunta
Eu tenho uma classe que é definida da seguinte forma:
template <class WidgetType>
class CometWidget : public WidgetType;
Dentro de uma função estou fazendo isso:
dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();
e resolve o CometWidget
digite, esteja em conformidade e execute corretamente.
O código é executado dentro do CometWidget
aula.
Como diabos isso acontece?
Por que?Deveria mesmo compilar?
Solução
Se estiver dentro da declaração de CometWidget
então você não precisa qualificar explicitamente o modelo (ou qualquer termo que você use para dizer CometWidget<...>
).
Outras dicas
Muito interessante de fato. Parece -me um bug interessante do compilador.
É possível deduzir o argumento correto do modelo CometWidget <> - da mesma maneira que você pode deduzir parâmetros de modelo de uma função da lista de argumentos. Se fosse elenco estático, seria menos surpreendente.
Com o elenco dinâmico, é esperado que pouco seja em comum entre a fonte e o tipo de destino. Então, esse "adivinhamento" pode ter ocorrido, mas não é certo.
Que compilador é esse?