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 に答える