22

我想从模板类继承并更改调用运算符“()”时的行为 - 我想调用另一个函数。这段代码

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...

我想问你如何正确地做到这一点,或者是否有其他方法可以做到这一点。谢谢。

4

1 回答 1

33

继承时,您必须展示如何实例化父模板,如果可以使用相同的模板类 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>
于 2012-10-15T12:37:06.803 回答