我想将字符数组转换为具有相同布局的虚拟类,但虚拟方法除外。我该怎么做?
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 );
最佳答案
您不能直接转换指针,至少不能使用已定义的行为。 RecordStruct
object 有一个用于解析虚拟方法调用的 vtable,并且 pdata
不太可能包含此数据。一旦您尝试在生成的对象上调用虚拟方法,您几乎肯定会崩溃。 (如果这确实有效,您将使用的转换运算符是 reinterpret_cast<>
。)
我建议在 VIRT_struct
上定义一个构造函数这需要 pdata
作为参数并将数据从中提取到 A
和 B
.
或者,您可以拥有 VIRT_struct
只包含与 pdata
相同的指针并使用该指针获取数据。 (请记住明确定义谁拥有指向分配,以便它可以正确释放!)
关于c++ - 从原始数据创建虚拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933934/