Потратив некоторое время на разработку на C #, я заметил, что если вы объявляете абстрактный класс с целью использования его в качестве интерфейса, вы не можете создать экземпляр вектора этого абстрактного класса для хранения экземпляров дочерних классов.
#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;
};
Строка, объявляющая вектор абстрактного класса, вызывает эту ошибку в MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Я вижу очевидный обходной путь - заменить IFunnyInterface следующим:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Является ли это приемлемым обходным решением для C ++? Если нет, то есть ли какая-нибудь сторонняя библиотека, такая как boost, которая могла бы помочь мне обойти это?
Спасибо за чтение этого !
Энтони