我有一个定义如下的类:
template <class WidgetType>
class CometWidget : public WidgetType;
在函数内部我这样做:
dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_();
并解析CometWidget
类型,符合并正确运行
代码在CometWidget
类中运行。
这究竟是怎么发生的? 为什么会这样?它应该编译吗?
答案 0 :(得分:2)
如果它在CometWidget
的声明中,那么您不需要明确限定模板(或者您使用的任何术语CometWidget<...>
)。
答案 1 :(得分:0)
非常有趣。在我看来,这似乎是一个有趣的编译器错误。
可以推断出CometWidget&lt;&gt;的正确参数。模板 - 就像从参数列表中推导出函数的模板参数一样。如果它是静态演员,那就不那么令人惊讶了。
使用动态强制转换,源和目标类型之间几乎没有共同点。所以,这种“猜测”可能已经发生,但那时它并不合适。
这是什么编译器?