質問

私は以下のように定義されたクラスを持っています:

template <class WidgetType>
class CometWidget : public WidgetType;

私はこれをやっている関数の内部ます:

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

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

これが起こらないどのように地球上の?
どうしてこんなことに?それもコンパイルする必要がありますか?

役に立ちましたか?

解決

それはCometWidgetの宣言内なら、あなたは明示的にテンプレートを修飾する必要はありません(または、あなたがCometWidget<...>を言うために使用するものは何でも用語)。

他のヒント

非常に確かに面白いです。それは面白いコンパイラのバグのように私には思える。

あなたは引数リストから関数のテンプレートパラメータを推定することができますちょうど同じように - CometWidget <>テンプレートの正しい引数を推定することが可能です。それは静的なキャストになるなら、それはそれほど驚くべきだろう。

は、動的キャストで、少しソースとターゲット・タイプの間で共通にすることが期待されます。だから、このように発生している可能性がある「推測」、しかしそれは正当なものではないのです。

コンパイラはこれは何?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top