可以将 STL 容器从 Base 类型转换为 Derived 类型吗?
例如,我有两个向量。第一个是基类的类型,第二个是派生类的类型。
class Base
{
// Code
};
class Derive : public Base
{
// Code
};
Usage
vector<Base*>* vec_base = new vector<Base*>;
// Add some Derive type data to vec_base
vector<Derive*>* vec_derive = (vector<Derive*>*)(vec_base);
// Using elements as Derive pointers. Works fine.
这个可以吗 ? (它工作得很好,但我想得到一些关于这个的评论)。非常感谢。
编辑:根据答案更新。
说,如果我小心地使用该向量,并且不会使用多重继承,并且不会插入 Derive 类型以外的对象,可以吗? (我猜,事实并非如此)
非常感谢您的回答。
这绝对是不行的,并且是 c 风格强制转换掩盖错误的示例之一。在这种情况下,“它对我有用”并不表示明确定义的行为。
如果你真的想这样做,我建议:
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
class Base
{
// Code
virtual ~Base();
};
class Derrive : public Base
{
// Code
};
Derrive *convert(Base * in) {
// assert here?
return dynamic_cast<Derrive*>(in);
}
int main() {
vector<Base*>* vec_base = new vector<Base*>;
// Add some Derrive type data to vec_base
vector<Derrive*>* vec_derrive = new vector<Derrive*>;
transform(vec_base->begin(), vec_base->end(), back_insert_iterator<vector<Derrive*> >(*vec_derrive), convert);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)