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



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

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
  ...
}

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

using Base::data;

最新更新