Ayant passé un certain temps à développer en C #, j'ai remarqué que si vous déclarez une classe abstraite dans le but de l'utiliser comme interface, vous ne pouvez pas instancier un vecteur de cette classe abstraite pour stocker des instances des classes enfants.
#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 ligne déclarant le vecteur de classe abstraite provoque cette erreur dans MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Je vois une solution de contournement évidente, qui consiste à remplacer IFunnyInterface par ce qui suit:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Est-ce une solution de contournement acceptable en matière de C ++? Sinon, y a-t-il une bibliothèque tierce comme boost qui pourrait m'aider à contourner cela?
Merci d'avoir lu ceci !
Anthony