Herencia de plantilla de clase C++
Me gustaría heredar de la clase de plantilla y cambiar el comportamiento cuando se llama a los operadores "()". Quiero llamar a otra función. este codigo
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 da este error:
Error 1 error C2955: 'InsertItem' : use of class template requires template argument list...
Me gustaría preguntarle cómo hacer esto correctamente o si hay otra forma de hacerlo. Gracias.
Aceptado
Al heredar, debe mostrar cómo crear una instancia de la plantilla principal; si se puede usar la misma clase de plantilla T, haga esto:
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 se necesita algo más, simplemente cambie la línea:
class InsertItem2 : InsertItem<needed template type here>