0

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

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();

}
4

2 回答 2

3

您遇到的问题称为name-hiding

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

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

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

class testDerived : public testBase<double> {
public:
  using testBase<double>::insert;
private:
  void insert(int a) {
    // something
  }
};
于 2012-06-20T20:49:50.293 回答
2

添加

public:
  using testBase<double>::insert;

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

于 2012-06-20T20:49:26.500 回答