首页 > 解决方案 > 当我指定 T 必须基于 C++ 中的某个类时,如何调用泛型变量的方法?

问题描述

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()方法?

标签: c++c++11

解决方案


您可以专门化模板。

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(); }
}

推荐阅读