如何检查我的模板参数是否源自某个基类?这样我可以确定函数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()
方法的类使用,无论它来自何处或基于什么基础。