首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我们不能声明一个std::vector<AbstractClass>呢?

为什么我们不能声明一个std::vector<AbstractClass>呢?
EN

Stack Overflow用户
提问于 2010-01-29 17:17:03
回答 6查看 52.9K关注 0票数 98

在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这样的第三方库可以帮助我解决这个问题?

感谢你阅读这篇文章!

安东尼

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2160920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档