我想知道是否有可能将派生类值的 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>
等)以这种方式工作的原因,因为它将算法的实现与所操作的事物分开上。