我想将一个字符数组转换为具有相同布局的虚拟类,但虚拟方法除外。我怎么能这样做?
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 :(得分:1)
您无法直接转换指针,至少不能使用已定义的行为。 RecordStruct
对象具有用于解析虚方法调用的vtable,pdata
不太可能包含此数据。一旦你试图在结果对象上调用虚方法,你几乎肯定会崩溃。 (如果这确实有效,那么将使用的强制转换操作符为reinterpret_cast<>
。)
我建议在VIRT_struct
上定义一个以pdata
为参数的构造函数,并将其中的数据提取到A
和B
。
或者,您可以让VIRT_struct
只包含pdata
所执行的相同指针,并使用该指针获取数据。 (请记住清楚地定义谁拥有指向的分配,以便可以正确释放!)