udu*_*uck 2 c++ inheritance templates
如何检查我的模板参数是否来自某个基类?所以我确信可以调用函数Do:
template<typename Ty1> class MyClass
{
...
void MyFunction();
};
template<typename Ty1> void MyClass<Ty1>::MyFunction()
{
Ty1 var;
var.Do();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用标准类型特征is_base_of来实现此目的.看看这个例子:
#include <iostream>
#include <type_traits>
using namespace std;
class Base {
public:
void foo () {}
};
class A : public Base {};
class B : public Base {};
class C {};
void exec (false_type) {
cout << "your type is not derived from Base" << endl;
}
void exec (true_type) {
cout << "your type is derived from Base" << endl;
}
template <typename T>
void verify () {
exec (typename is_base_of<Base, T>::type {});
}
int main (int argc, char** argv) {
verify<A> ();
verify<B> ();
verify<C> ();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
your type is derived from Base
your type is derived from Base
your type is not derived from Base
Run Code Online (Sandbox Code Playgroud)