Avendo trascorso un po 'di tempo sviluppando in C#, ho notato che se si dichiara una classe astratta allo scopo di usarlo come interfaccia non è possibile creare un'istanza di un vettore di questa classe astratta per memorizzare istanze delle classi secondarie.Perché non possiamo dichiarare uno std :: vector <AbstractClass>?
#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 linea che dichiara il vettore di classe astratta causa questo errore in MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
vedo una soluzione ovvia, che sostituirà IFunnyInterface con il seguente:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
È una soluzione accettabile C++ saggia? In caso contrario, c'è qualche spinta di libreria di terze parti che potrebbe aiutarmi a risolvere questo problema?
Grazie per aver letto questo!
Anthony
+1 per menzionare l'affettatura, anche – xtofl
Grazie per la risposta – BlueTrin
oppure è possibile utilizzare std :: vector> se non si desidera gestire manualmente la durata dell'oggetto. –