Tendo passado algum tempo desenvolvendo em C #, percebi que se você declarar uma classe abstrata com o propósito de usá-la como uma interface, não poderá instanciar um vetor dessa classe abstrata para armazenar instâncias das classes filhas.
#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;
};
A linha que declara o vetor da classe abstrata causa este erro no MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Vejo uma solução alternativa óbvia, que é substituir IFunnyInterface pelo seguinte:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Esta é uma solução alternativa aceitável em relação ao C ++? Se não, existe alguma biblioteca de terceiros como boost que poderia me ajudar a contornar isso?
Obrigado por ler isso!
Anthony