可以將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