首页 > 解决方案 > 如何通过派生指针调用基类中的模板成员函数

问题描述

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

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

标签: c++c++11

解决方案


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

using Base::data;

推荐阅读