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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top