3

次のように定義されたクラスがあります。

template <class WidgetType>
class CometWidget : public WidgetType;

関数内で私はこれをやっています:

dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();

タイプを解決しCometWidget、準拠して正しく実行します。
コードはCometWidgetクラス内で実行されます。

一体どうしてこれが起こるのですか?
どうしてこんなことに?コンパイルする必要がありますか?

4

2 に答える 2

2

の宣言内にある場合CometWidgetは、テンプレート(または使用する用語)を明示的に修飾する必要はありませんCometWidget<...>

于 2010-01-27T20:29:05.640 に答える
0

とても興味深いです。興味深いコンパイラのバグのように思えます。

CometWidget<> テンプレートの正しい引数を推測することは可能です - 引数リストから関数のテンプレート パラメーターを推測するのと同じ方法です。静的キャストであれば、それほど驚くことではありません。

動的キャストでは、ソースとターゲットの型の間に共通点はほとんどないと考えられます。したがって、そのような「推測」が発生した可能性がありますが、それは正当なものではありません。

これは何のコンパイラですか?

于 2010-01-27T19:59:49.250 に答える