我在很多不同的帖子中都读过关于这个问题的内容,数组不能被多态处理,应该使用指针数组来代替,我很清楚其背后的原因。
但是,我找不到它是如何完成的示例,而且我似乎无法让它工作。考虑以下代码:
#include <vector>
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : Base
{
public:
Derived();
~Derived();
};
void foo( std::vector<Base*> )
{
// do something
}
int main()
{
std::vector<Derived*> bar;
foo(bar);
return 0;
}
编译这个给出错误信息
could not convert 'bar' from 'std::vector<Derived*>' to 'std::vector<Base*>
我是否遗漏了什么或者设计是否存在根本性缺陷?提前致谢。
最佳答案
std::vector<Derived*>
和 std::vector<Base*>
是不同的类型,它们之间没有转换。但看起来你需要的是
std::vector<Base*> bar;
foo(bar);
即让多态性在 vector 的元素级别起作用。
但是,请注意,为了在通常意义上使用多态性,Derived
必须公开继承自Base
:
class Derived : public Base
^^^^^^
或
struct Derived : Base
关于c++ - 如何多态地使用数组或指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850139/