如何通过派生的指针在基类中调用模板成员函数

时间:2019-03-27 03:44:04

标签: c++ c++11

以下示例只是我的代码的简化骨架。我的问题是为什么我不能从派生的指针调用模板成员函数。据我了解,通常也可以从派生的对象或指针中调用基类的成员函数。

class Base {
 public:
  template<typename T> T* data() { 
    static_cast<T *>(data(dtype)); 
  }
  virtual void data(DataType dtype) = 0;
};

class Derived1 : public Base {
  public:
   void data(DataType dtype) override { ... }
};

class Derived2 : public Base {
  public:
   void data(DataType dtype) override { ... }
};

int main() {
  Base * base = new Derived1();
  ...
  Derived1 * derived1 = dynamic_cast<Derived1 *>(base);
  derived1->tempalte data<int>(); // Compiling error
  ...
}

1 个答案:

答案 0 :(得分:1)

Derived1::data隐藏data中所有名为Base的成员。如果要使其可见,请在Derived1正文中的任意位置添加以下行:

using Base::data;