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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top