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