在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这样的第三方库可以帮助我解决这个问题?
感谢你阅读这篇文章!
安东尼
https://stackoverflow.com/questions/2160920
复制相似问题