Habiendo pasado bastante tiempo desarrollando en C #, noté que si declara una clase abstracta con el propósito de usarla como interfaz, no puede crear una instancia de un vector de esta clase abstracta para almacenar instancias de las clases secundarias.
#pragma once
#include <iostream>
#include <vector>
using namespace std;
class IFunnyInterface
{
public:
virtual void IamFunny() = 0;
};
class FunnyImpl: IFunnyInterface
{
public:
virtual void IamFunny()
{
cout << "<INSERT JOKE HERE>";
}
};
class FunnyContainer
{
private:
std::vector <IFunnyInterface> funnyItems;
};
La línea que declara el vector de clase abstracta provoca este error en MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Veo una solución obvia, que es reemplazar IFunnyInterface con lo siguiente:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
¿Es esta una solución alternativa aceptable en cuanto a C ++? Si no es así, ¿hay alguna biblioteca de terceros como boost que pueda ayudarme a solucionar esto?
Gracias por leer esto !
Antonio