可以将STL容器从Base类型转换为Derived类型吗?例如,我有两个向量。第一个是基类的类型,第二个是Derive类的类型。将基类型的STL容器转换为派生类型可以吗?
class Base
{
// Code
};
class Derive : public Base
{
// Code
};
使用
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.
这是好吗? (它工作正常,但我想获得一些关于此的评论)。非常感谢你。
编辑:根据答案更新。如果我仔细地使用该向量,并且不会使用多重继承,并且不会插入除导出类型之外的其他对象,那么可以吗? (我想,它不是)
非常感谢你的答案。
Re:update - 没有使用类似std :: transform的东西,你可以做的任何事情都将使它使用reinterpret_cast以外的任何其他类型,这不是你正在寻找的 – Flexo 2011-03-28 14:34:58
@awoodland因此,reinterpret_cast甚至不好多态类型?我的意思是,即使我100%确定“我知道矢量reinterpret_cast的确切类型”在这种情况下是未定义的? – Morpheus 2011-03-28 14:46:59
reinterpret_cast在std :: vector上绝对不好,问题是没有(便携式,标准化的)理由假设std :: vector 和std :: vector 的内存布局是兼容的,这样就可以工作。 –
Flexo
2011-03-28 14:50:09