问题描述
class Base {
public:
void A() {}
};
class Derived: public Base {
public:
void B() {}
};
template <typename T,std::enable_if<std::is_base_of<Base,T>::value,int>::type = 0>
class SomeClass {
public:
T t;
// I want to call method A() with variable 't'.
void invoke() { t.A(); }
};
auto some = new someClass<Derived>();
// I want to call method B() when the 'T' specify to 'Derived'.
some->t.B();
当“T”必须基于“Base”类时如何调用 A() 方法,而当“someClass”类中的“T”指定为“Derived”时如何调用 B() 方法?
解决方法
您可以专门设计一个模板。
template<typename>
class SomeClass;
template<>
class SomeClass<Base>
{
public:
Base t;
void invoke() { t.A(); }
}
template<>
class SomeClass<Derived>
{
public:
Derived t;
void invoke() { t.B(); }
}