c++ - 自动将指向派生类的指针列表转换为指向基类的指针列表

标签 c++ inheritance stl

假设我有一个基类和派生类,以及一个接受指向基类的指针的 STL vector 的函数:

class A { public: int x; };

class B : public A { };

void foo(const vector<A*> &va) {
    for (vector<A*>::const_iterator it = va.begin(); it < va.end(); it++)
        cout << (*it)->x << endl;
}

有什么方法可以将指针列表传递给派生类吗?即:

vector<B*> vb;
// ... add pointers to vb ...
foo(vb);

以上会导致下面的编译错误:

error: could not convert ‘vb’ from ‘std::vector<B*>’ to ‘std::vector<A*>’

即使 B* 可以转换为 A*。

最后,如果有普通指针的解决方案,它是否也适用于 boost 共享指针?

最佳答案

std::vector<B*> and std::vector<A*>在技​​术上是无关的。 C++ 不允许您这样做。

解决方法...为什么不使用 std::vector<Base*>并插入其中 Derived对象?这就是多态性、动态调度等的意义所在。

关于c++ - 自动将指向派生类的指针列表转换为指向基类的指针列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868347/

相关文章:

c++ - 我可以在低级 Hook 过程中区分触摸板和鼠标消息吗? (Win32)

c++ - 对 3X3 或 4X4 行列式进行单元测试

c++ - C++ 错误中的 Operator() 重载和继承

java - Hibernate,扩展实体 - "java.lang.IllegalArgumentException: Unknown entity"

c++ - 代码设计: Observer pattern?

c++ - 接受用户输入的字符并按出现的降序显示它们的程序

JavaScript 继承 : Object. create vs new

c++ - 在由谓词确定的 std::string 中替换字符的最 STL-ish 方法是什么?

c++ - 使用 istringstream 将 std::string 标记化为 std::map

c++ - STL中使用的Comp比较器是否要求永远不改变STL中的比较对象?