Spędziwszy trochę czasu na rozwijaniu w C #, zauważyłem, że jeśli zadeklarujesz klasę abstrakcyjną w celu użycia jej jako interfejsu, nie możesz utworzyć instancji wektora tej klasy abstrakcyjnej do przechowywania instancji klas potomnych.
#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;
};
Linia deklarująca wektor klasy abstrakcyjnej powoduje ten błąd w MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Widzę oczywiste obejście, które polega na zastąpieniu IFunnyInterface następującym:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Czy to dopuszczalne obejście C ++ mądre? Jeśli nie, czy istnieje biblioteka innej firmy, taka jak boost, która mogłaby mi pomóc w obejściu tego problemu?
Dziękuję za przeczytanie!
Anthony