Dopo aver trascorso un po 'di tempo a sviluppare in C #, ho notato che se dichiari una classe astratta allo scopo di usarla come interfaccia non puoi istanziare un vettore di questa classe astratta per memorizzare istanze delle classi figlie.
#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 riga che dichiara il vettore della classe astratta causa questo errore in MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Vedo un'ovvia soluzione alternativa, che è sostituire IFunnyInterface con quanto segue:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
È una soluzione alternativa accettabile per C ++? In caso contrario, esiste una libreria di terze parti come boost che potrebbe aiutarmi a aggirare questo problema?
Grazie per aver letto questo!
Anthony