Провівши досить багато часу на розробці в 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, яка могла б допомогти мені обійти це?
Дякую, що прочитали це!
Антоній