1. ホーム
  2. c++

[解決済み] クラステンプレート継承 C++

2022-03-07 01:32:08

質問

テンプレートクラスを継承して、演算子 "()" が呼ばれたときの動作を変更したい - 別の関数を呼び出したいのです。以下のコードです。

template<typename T>
class InsertItem
{
 protected:
 int counter;
 T   destination; 

 public:
  virtual void operator()(std::string item) {
     destination->Insert(item.c_str(), counter++);
  }

 public:
  InsertItem(T argDestination) {
          counter= 0;
    destination = argDestination;
  }
};

template<typename T>
class InsertItem2 : InsertItem
{
public:
 virtual void operator()(std::string item) {
  destination ->Insert2(item.c_str(), counter++, 0);
 }
};

を実行すると、このようなエラーが発生します。

Error 1 error C2955: 'InsertItem' : use of class template requires template argument list...

正しいやり方、もしくは他に方法があればお聞きしたいのですが。ありがとうございます。

どのように解決するのですか?

継承する場合、親テンプレートをインスタンス化する方法を示さなければなりませんが、同じテンプレートクラスTが使用できる場合は、これを行います。

template<typename T>
class InsertItem
{
protected:
    int counter;
    T   destination; 

public:
    virtual void operator()(std::string item) {
        destination->Insert(item.c_str(), counter++);
    }

public:
    InsertItem(T argDestination) {
        counter= 0;
        destination = argDestination;
    }
};

template<typename T>
class InsertItem2 : InsertItem<T>
{
public:
    virtual void operator()(std::string item) {
        destination ->Insert2(item.c_str(), counter++, 0);
    }
};

他に必要なものがあれば、その行を変更するだけです。

class InsertItem2 : InsertItem<needed template type here>