enable_if如果您有C ++ 11或更高版本,我们可以在这里使用
template<typename T, typename std::enable_if<std::is_base_of<MyClass, T>::value>::type* = nullptr>T Foo(T bar){ return T();}例如:
class MyClass{public: int a = 1;};class Derived : public MyClass{public: int b = 2;};class NotDerived{public: int b = 3;};template<typename T, typename std::enable_if<std::is_base_of<MyClass, T>::value>::type* = nullptr>T Foo(T bar){ return T();}int main(){ Derived d; NotDerived nd; std::cout << Foo(d).b << std::endl;; // works //std::cout << (Foo(nd)).b << std::endl;; //compiler error return 0;}现场演示



