c++ 如何从派生类调用派生类中重载的模板类函数

c++ How do you call a template class function that is overloaded in the derived class, from the derived class?

本文关键字:派生 类函数 重载 调用 c++      更新时间:2023-10-16

有没有办法在派生类中重载基模板类函数,并且仍然能够调用基类函数,如下所述?

template <class A>
class testBase {
public:
  void insert() {
    // Whatever
  }
};
class testDerived : public testBase<double> {
private:
  void insert(int a) {
    // something
  }
};

int main() {
  testDerived B;
  // Compiler doesn't recognize overloaded insert,
  // How do you do this?
  B.insert();
}

您遇到的问题称为名称隐藏

可以通过按名称限定基类函数来调用基类函数:

B.testBase<double>::insert();

或者通过"取消隐藏"它,通过使用 using 声明在派生类中声明它:

class testDerived : public testBase<double> {
public:
  using testBase<double>::insert;
private:
  void insert(int a) {
    // something
  }
};

添加

public:
  using testBase<double>::insert;

testDerived的定义。 这将使基的隐藏成员在派生类中可用