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;
};
抽象クラスのベクトルを宣言する行により、MSVS2005で次のエラーが発生します。
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
IFunnyInterfaceを次のように置き換えるという明らかな回避策があります。
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
これはC ++に関して許容できる回避策ですか?そうでない場合、これを回避するのに役立つブーストのようなサードパーティのライブラリはありますか?
これを読んでくれてありがとう!
アンソニー