C++:我可以在函数调用期间将向量<derived_class>转换为向量<base_class>吗?

Ale*_*TPF 7 c++ stl casting vector

我有一个现有的类和函数,如下所示:

Class base_class{
    ...
}

void Func(...,vector<base_class> &vec_b,...){
    // inside the function, the vector vec_b is being re-organized and re-sized
}
Run Code Online (Sandbox Code Playgroud)

我定义了一个派生类,看起来像:

Class derived_class: public base_class{
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,在不改变功能Func,可我通过vector<derived_class>Func,例如:

void main(){
    vector <derived_class> d;
    Func(...,d,...);
}
Run Code Online (Sandbox Code Playgroud)

派生类d经历相同的重新组织和重新调整大小?我知道我可以在一个函数调用中将派生类转换为基类而没有问题,但是一旦用一个向量进入游戏,似乎有困难吗?我无法在线找到答案,因此非常感谢任何建议或帮助.谢谢.

Joh*_*nck 0

如果两个类的大小不同,则用派生类的向量替换基类的向量将不起作用。这是因为向量在内部存储类型的连续实例,因此基向量会认为第二个元素位于与实际位置不同的位置。但是,您可以使用指针向量。