web-dev-qa-db-fra.com

Héritage de modèle de classe C ++

Je voudrais hériter de la classe de modèle et changer le comportement lorsque les opérateurs "()" sont appelés - je veux appeler une autre fonction. Ce code

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

me donne cette erreur:

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

J'aimerais vous demander comment procéder correctement ou s'il existe une autre façon de procéder. Merci.

19
DropDropped

Lors de l'héritage, vous devez montrer comment instancier le modèle parent, si la même classe de modèle T peut être utilisée, procédez comme suit:

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

Si quelque chose d'autre est nécessaire, changez simplement la ligne:

class InsertItem2 : InsertItem<needed template type here>
26
Rudolfs Bundulis