如何检查我的模板参数是否派生自某个基类?这样我就可以确定函数 Do 可以被调用:
template<typename Ty1> class MyClass
{
...
void MyFunction();
};
template<typename Ty1> void MyClass<Ty1>::MyFunction()
{
Ty1 var;
var.Do();
}
最佳答案
不要。如果作为 Ty1
的参数提供的类中不存在方法 Do()
,它将根本无法编译。
模板是 duck typing 的一种形式: 一个类的能力不是由它继承的接口(interface)决定的,而是由它实际公开的功能决定的。
优点是您的模板可以被具有合适的Do()
方法的任何 类使用,无论它来自哪里或它有什么基础。
关于c++检查模板参数是否派生自某个基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881399/