gpt4 book ai didi

c++ - 从原始数据创建虚拟类

转载 作者:行者123 更新时间:2023-11-28 07:40:26 25 4
gpt4 key购买 nike

我想将字符数组转换为具有相同布局的虚拟类,但虚拟方法除外。我该怎么做?

        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作为参数并将数据从中提取到 AB .

或者,您可以拥有 VIRT_struct只包含与 pdata 相同的指针并使用该指针获取数据。 (请记住明确定义谁拥有指向分配,以便它可以正确释放!)

关于c++ - 从原始数据创建虚拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com