从原始数据创建虚拟类

时间:2013-04-10 18:46:02

标签: c++ casting

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

        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 );  

1 个答案:

答案 0 :(得分:1)

您无法直接转换指针,至少不能使用已定义的行为。 RecordStruct对象具有用于解析虚方法调用的vtable,pdata不太可能包含此数据。一旦你试图在结果对象上调用虚方法,你几乎肯定会崩溃。 (如果这确实有效,那么使用的强制转换操作符为reinterpret_cast<>。)

我建议在VIRT_struct上定义一个以pdata为参数的构造函数,并将其中的数据提取到AB

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