gpt4 book ai didi

c++ - 为什么我们不能声明一个 std::vector

转载 作者:IT老高 更新时间:2023-10-28 12:06:36 25 4
gpt4 key购买 nike

在使用 C# 进行开发后,我注意到如果您声明一个抽象类以将其用作接口(interface),则您无法实例化该抽象类的 vector 来存储子类的实例。

#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中声明抽象类 vector 的行会导致这个错误:

error C2259: 'IFunnyInterface' : cannot instantiate abstract class

我看到了一个明显的解决方法,即用以下内容替换 IFunnyInterface:

class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};

这是 C++ 明智的可接受的解决方法吗?如果没有,是否有像 boost 这样的第三方库可以帮助我解决这个问题?

感谢您阅读本文!

安东尼

最佳答案

你不能实例化抽象类,因此抽象类的 vector 不能工作。

但是,您可以使用指向抽象类的指针 vector :

std::vector<IFunnyInterface*> ifVec;

这也允许您实际使用多态行为 - 即使类不是抽象的,按值存储也会导致 object slicing 的问题.

关于c++ - 为什么我们不能声明一个 std::vector<Abstract Class>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com