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

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

最佳答案

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

我建议在 VIRT_struct 上定义一个构造函数这需要 pdata作为参数并将数据从中提取到 AB .

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

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

相关文章:

c++ - QtQuick、动态图像和 C++

java - x=x+3 和 x+=3 有什么区别?为什么一个需要类型转换而另一个不需要?

c# - 在 C# 中转换类

尽管格式有效,MySQL str_to_date 仍生成 NULL

c++ - 枚举类 "could not convert to unsigned int"

c++ - 大输入段错误

c++ - 使用结构作为缓冲支架

c++ - 警告 : function uses 'auto' type specifier without trailing return type

c++ - 重新实现第 3 方非虚拟功能

c++ - 在 C++ 中对 void 指针执行算术运算