如何检查我的模板参数是否源自某个基类?这样我可以确定函数Do可以被调用:

template<typename Ty1> class MyClass
{
  ...
  void MyFunction();
};

template<typename Ty1> void MyClass<Ty1>::MyFunction()
{
  Ty1 var;
  var.Do();
}

最佳答案

别。如果在作为Do()的参数提供的类中不存在Ty1方法,则它将无法编译。

模板是duck typing的一种形式:类的能力不是由其继承的接口(interface)决定的,而是由其实际提供的功能决定的。

这样做的好处是,您的模板可以被任何具有适当Do()方法的类使用,无论它来自何处或基于什么基础。

10-06 07:04