代码之家  ›  专栏  ›  技术社区  ›  the_drow

动态铸造中的模板推导

  •  3
  • the_drow  · 技术社区  · 15 年前

    我有一个类定义如下:

    template <class WidgetType>
    class CometWidget : public WidgetType;
    

    在一个函数中,我执行以下操作:

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

    它解决了 CometWidget 类型、符合要求并正确运行。
    代码运行在 CuMeWIDGET 班级。

    这到底是怎么发生的?
    为什么会这样?它甚至应该编译吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   MSN    15 年前

    如果在 CometWidget 那么您就不需要显式地限定模板(或者您用来说的任何术语 CometWidget<...> )。

        2
  •  0
  •   Pavel Radzivilovsky    15 年前

    确实很有趣。在我看来,这是一个有趣的编译器错误。

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

    对于动态强制转换,源类型和目标类型之间几乎没有共同点。所以,这样的“猜测”可能已经发生了,但这不是一个合理的猜测。

    这是什么编译器?