detrazione modello in dynamic_cast
-
23-09-2019 - |
Domanda
Ho una classe che è definito come il seguente:
template <class WidgetType>
class CometWidget : public WidgetType;
all'interno di una funzione che sto facendo questo:
dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();
e si risolve il tipo CometWidget
, conforme e funzionare correttamente.
Il codice viene eseguito all'interno della classe CometWidget
.
Come diavolo succede questo?
Perchè è così? Dovrebbe anche compilare?
Soluzione
Se è all'interno della dichiarazione di CometWidget
allora non c'è bisogno di qualificare in modo esplicito il modello (o qualsiasi termine si utilizza per dire CometWidget<...>
).
Altri suggerimenti
Molto interessante. Mi sembra come un interessante bug del compilatore.
E 'possibile dedurre la corretta argomento del template CometWidget <> - alla stessa maniera, si può dedurre parametri di modello di una funzione dalla lista degli argomenti. Se sarebbe fuso statica, sarebbe meno sorprendente.
Con dinamico cast, c'è poco dovrebbe essere in comune tra la sorgente e il tipo di destinazione. Così, ad esempio "indovinare" potrebbe essersi verificato, ma poi non è uno legittimo.
Che compilatore è questo?