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와 같은 타사 라이브러리가 있습니까?
읽어 주셔서 감사합니다!
안토니