微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我指定 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() 方法

解决方法

您可以专门设计一个模板。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。