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

1 回答 1

1

您不能直接转换指针,至少不能使用已定义的行为。一个RecordStruct对象有一个用于解析虚拟方法调用的 vtable,并且pdata不太可能包含这些数据。一旦您尝试在结果对象上调用虚拟方法,您几乎肯定会崩溃。(如果这确实有效,那么您使用的演员运算符是reinterpret_cast<>。)

我建议在其上定义一个构造函数VIRT_struct,将pdata其作为参数并将数据从中提取到AandB中。

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

于 2013-04-10T18:50:36.250 回答