【发布时间】:2011-08-07 13:38:45
【问题描述】:
我想知道是否可以将派生类值的向量转换为基类值的向量。具体来说,我希望能够将基类对象的向量传递给其形式参数采用基类向量的函数。似乎无法直接使用,因为以下代码示例会产生错误(使用 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);
}
test.cc:16: 错误:从 'std::vector >' 转换为非标量类型 'std::vector >'请求
我希望能够调用函数,而无需定义具有 A 类型元素的新向量、插入 B 类型元素或更改为指针向量。
【问题讨论】:
-
使用模板怎么样?
-
@GWW 是的,模板就是答案,谢谢。
-
如何将指针传递给向量。我没有对向量做太多的工作,但你不能将指针传递给向量。就这么简单吗?
-
baash:没那么容易,抱歉。矢量* 不能转换为矢量*,就像矢量 不是矢量一样。
-
“我希望能够调用函数,而不必定义具有 A 类型元素的新向量,插入我的 B 类型元素”。重要提示:不要这样做,这将不起作用。
vector<A>的元素的运行时类型始终为A。如果您尝试将子类对象插入到向量中,它将被切片为A。
标签: c++ oop stl vector polymorphism