2013-04-10 49 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