以下示例只是我的代码的简化骨架。我的问题是为什么我不能从派生的指针调用模板成员函数。据我了解,通常也可以从派生的对象或指针中调用基类的成员函数。
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
...
}
答案 0 :(得分:1)
Derived1::data
隐藏data
中所有名为Base
的成员。如果要使其可见,请在Derived1
正文中的任意位置添加以下行:
using Base::data;