Tengo el código siguiente. Tengo una clase de plantilla abstracta Foo y dos subclases (Foo1 y Foo2) que se derivan de instancias de la plantilla. Deseo utilizar punteros en mi programa que puedan apuntar a objetos de tipo Foo1 o Foo2, por lo tanto, creé una interfaz IFoo.Creación de una interfaz para una plantilla de clase abstracta en C++
Mi problema es que no estoy seguro de cómo incluir functionB en la interfaz, ya que depende de la instanciación de la plantilla. ¿Es posible hacer accesible la función B a través de la interfaz, o estoy intentando lo imposible?
Muchas gracias por su ayuda.
class IFoo {
public:
virtual functionA()=0;
};
template<class T>
class Foo : public IFoo{
public:
functionA(){ do something; };
functionB(T arg){ do something; };
};
class Foo1 : public Foo<int>{
...
};
class Foo2 : public Foo<double>{
...
};
pero técnicamente no voy a ser la creación de una instancia de IFoo, Solo deseo crear una instancia de Foo1 (o 2) (apuntada por un puntero IFoo) y asumí que la función apropiada podría ser encontrada por el límite dinámico. – bishboshbash
@bishboshbash: Para que se encuentre una función mediante vinculación dinámica, se deben conocer todos los tipos de argumentos; de lo contrario, no estaría claro qué buscar si utilizó funciones sobrecargadas. – liori
Creo que entiendo. Si creara una instancia de Foo1 y llamara a Foo1.functionB (..) funcionaría bien, ya que la plantilla se ha instanciado. ¿Podría crear una clase abstracta para apuntar a los objetos de tipo Foo1 o Foo2 a través de herencia múltiple y, por lo tanto, evitar el problema del enlace dinámico que intenta pasar a través de una plantilla desinstalada? – bishboshbash