我花了很多时间在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这样的第三方库可以帮助我解决这个问题?
谢谢您阅读此篇 !
安东尼