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

时间:2012-06-20 20:44:01

标签: c++ templates inheritance name-hiding

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

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

}

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:2)

添加

public:
  using testBase<double>::insert;

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