2013-04-10 55 views
0

我想將字符數組轉換爲具有相同佈局的虛擬課程,但虛擬課程除外。我怎樣才能做到這一點?從原始數據創建虛擬課堂

 class RecordStruct 
    { 
    private: 
     virtual MStream& write2stream(MStream& os) const = 0; 
    public: 
     friend MStream& operator<<(MStream& os, const RecordStruct& stru) 
     { 
      return stru.write2stream(os); 
     }; 

    }; 

    class VIRT_struct : public RecordStruct 
    { 
     char A[7]; char B[8]; 
     virtual MStream& write2stream(MStream& os) const; 

    }; 

    const RecordStruct* = some_cast<const RecordStruct*>(pdata); 
+0

「pdata」的類型是什麼? – cdhowie 2013-04-10 18:47:52

+0

void *或char * – user1987442 2013-04-10 18:49:32

回答

1

您不能直接轉換指針,至少不能定義行爲。 A RecordStruct對象具有用於解析虛擬方法調用的vtable,並且pdata不太可能包含此數據。只要你試圖調用結果對象的虛擬方法,你幾乎肯定會崩潰。 (如果沒有工作,轉換運算符,你會使用reinterpret_cast<>。)

我建議定義上VIRT_struct一個構造函數pdata作爲參數,並提取數據從入AB

或者,您可以讓VIRT_struct只包含與pdata相同的指針,並使用該指針來獲取數據。 (請記住明確定義誰擁有指向分配,以便它可以正確釋放!)

+0

這是相當多的領域。如果我知道大小,我可以使用memcpy。 (但是它是虛擬的,我不知道如何獲得數據的確切大小) – user1987442 2013-04-10 19:04:13

+0

@ user1987442如果您不想複製數據,則將指針或引用存儲在'VIRT_struct對象。 – cdhowie 2013-04-10 19:16:57