从子类的STL向量到基类向量的转换

Ste*_*n L 7 c++ oop polymorphism stl vector

我想知道是否有可能将派生类值的向量转换为基类值的向量.具体来说,我希望能够将基类对象的向量传递给其形式参数采用基类向量的函数.它似乎不可能直接,因为下面的代码示例产生错误(使用g ++):

#include <vector>

class A {
};

class B : public A {
};


void function(std::vector<A> objs) {
}

int main(int argc, char **argv) {
    std::vector<B> objs_b;
    objs_b.push_back(B());
    function(objs_b);
}
Run Code Online (Sandbox Code Playgroud)

test.cc:16:错误:从'std :: vector <B,std :: allocator <B>>'转换为非标量类型'std :: vector <A,std :: allocator <A >>>'

我希望能够调用函数,而无需使用类型A的元素定义新向量,插入类型B的元素或更改为指针向量.

Pet*_*ter 11

不它不是.vector<B>不是来源于vector<A>,不管这个事实B来源于A.你必须以某种方式改变你的功能.

一个更具惯用性的C++方法可能是对它进行模板化并让它需要一对迭代器 - 这就是各种标准库函数(<algorithm>等)以这种方式工作的原因,因为它将算法的实现与它运行的事物分开. .