dynamic_cast中的模板推导

时间:2010-01-27 19:43:28

标签: c++ templates dynamic-cast template-deduction

我有一个定义如下的类:

template <class WidgetType>
class CometWidget : public WidgetType;

在函数内部我这样做:

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

并解析CometWidget类型,符合并正确运行 代码在CometWidget类中运行。

这究竟是怎么发生的? 为什么会这样?它应该编译吗?

2 个答案:

答案 0 :(得分:2)

如果它在CometWidget的声明中,那么您不需要明确限定模板(或者您使用的任何术语CometWidget<...>)。

答案 1 :(得分:0)

非常有趣。在我看来,这似乎是一个有趣的编译器错误。

可以推断出CometWidget&lt;&gt;的正确参数。模板 - 就像从参数列表中推导出函数的模板参数一样。如果它是静态演员,那就不那么令人惊讶了。

使用动态强制转换,源和目标类型之间几乎没有共同点。所以,这种“猜测”可能已经发生,但那时它并不合适。

这是什么编译器?