テンプレートクラスから継承し、演算子「()」が呼び出されたときの動作を変更したい-別の関数を呼び出したい。このコード
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>