如何多态地使用指针的数组或向量?

Yan*_*nik 2 c++ arrays polymorphism

关于这个问题,我已经阅读了许多不同的帖子,不应该对数组进行多态处理,而应该使用指针数组,而我背后的推理理由很明显.

但是,我找不到它是如何完成的例子,我似乎无法让它工作.考虑以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

编译它会给出错误消息

could not convert 'bar' from 'std::vector<Derived*>' to 'std::vector<Base*>
Run Code Online (Sandbox Code Playgroud)

我错过了什么或者设计是否存在根本缺陷?提前致谢.

jua*_*nza 6

std::vector<Derived*>并且std::vector<Base*>是不同的类型,它们之间没有转换.但它看起来像你需要的是

std::vector<Base*> bar;
foo(bar);
Run Code Online (Sandbox Code Playgroud)

即让多态性在向量元素的水平上起作用.

但是,请注意,为了在通常意义上的使用多态,Derived有继承公开来自Base:

class Derived : public Base
                ^^^^^^
Run Code Online (Sandbox Code Playgroud)

要么

struct Derived : Base
Run Code Online (Sandbox Code Playgroud)