dynamic_castをでテンプレートの控除
-
23-09-2019 - |
質問
私は以下のように定義されたクラスを持っています:
template <class WidgetType>
class CometWidget : public WidgetType;
私はこれをやっている関数の内部ます:
dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();
と、それは、CometWidget
タイプを解決準拠し、正しく実行されます。
CometWidget
クラス内のコードが実行されます。
これが起こらないどのように地球上の?
どうしてこんなことに?それもコンパイルする必要がありますか?
解決
それはCometWidget
の宣言内なら、あなたは明示的にテンプレートを修飾する必要はありません(または、あなたがCometWidget<...>
を言うために使用するものは何でも用語)。
他のヒント
非常に確かに面白いです。それは面白いコンパイラのバグのように私には思える。
あなたは引数リストから関数のテンプレートパラメータを推定することができますちょうど同じように -CometWidget <>テンプレートの正しい引数を推定することが可能です。それは静的なキャストになるなら、それはそれほど驚くべきだろう。
は、動的キャストで、少しソースとターゲット・タイプの間で共通にすることが期待されます。だから、このように発生している可能性がある「推測」、しかしそれは正当なものではないのです。
コンパイラはこれは何?
所属していません StackOverflow