我想知道是否有可能将派生类值的 vector 转换为基类值的 vector 。具体来说,我希望能够将基类对象的 vector 传递给函数,该函数的形式参数采用基类的 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);
}



我希望能够调用函数,而不必使用A类型的元素定义新的 vector ,插入B类型的元素或更改为指针的 vector 。

最佳答案

不它不是。不管vector<B>是从vector<A>派生的,B都不是从A派生的。您将不得不以某种方式更改您的功能。

更加惯用的C++方法可能是对其进行模板化,并使其带有一对迭代器-这就是为什么各种标准库函数(<algorithm>等)以这种方式工作的原因,因为它将算法的实现与所操作的事物分开上。

10-07 13:26
查看更多