C # 'da geliştirmek için epey bir zaman harcadıktan sonra, onu bir arayüz olarak kullanmak amacıyla soyut bir sınıf bildirirseniz, çocuk sınıflarının örneklerini saklamak için bu soyut sınıfın bir vektörünü başlatamayacağınızı fark ettim.
#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;
};
Soyut sınıfın vektörünü bildiren satır MS VS2005'te bu hataya neden olur:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
IFunnyInterface'i aşağıdakilerle değiştiren bariz bir çözüm görüyorum:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Bu kabul edilebilir bir geçici çözüm C ++ akıllıca mı? Değilse, bu sorunu aşmama yardımcı olabilecek boost gibi herhangi bir üçüncü taraf kitaplığı var mı?
Bunu okuduğunuz için teşekkürler!
Anthony