Nachdem ich einige Zeit in C # verbracht hatte, stellte ich fest, dass Sie, wenn Sie eine abstrakte Klasse deklarieren, um sie als Schnittstelle zu verwenden, keinen Vektor dieser abstrakten Klasse instanziieren können, um Instanzen der untergeordneten Klassen zu speichern.
#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;
};
Die Zeile, die den Vektor der abstrakten Klasse deklariert, verursacht diesen Fehler in MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Ich sehe eine offensichtliche Problemumgehung, die darin besteht, IFunnyInterface durch Folgendes zu ersetzen:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Ist dies eine akzeptable Problemumgehung für C ++? Wenn nicht, gibt es eine Drittanbieter-Bibliothek wie Boost, die mir helfen könnte, dies zu umgehen?
Vielen Dank für das Lesen!
Anthony