版本化CArchive串行化,序列化

本文介绍了如何在C++中使用CArchive进行对象的串行化和反串行化操作,包括定义可串行化的类、声明DECLARE_SERIAL宏、实现serialize函数以及IMPLEMENTS_SERIAL宏。通过示例展示了如何存储和读取CLine类实例到文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

line.h

#pragma once
#include "pch.h"
//
//CArchive串行化,序列化
//
//1.编写可序列化的类,继承自cobject
//2.DECLARE_SERIAL  声明
//3.serialize 函数
//4.IMPLEMENT_SERIAL
//可序列化类的版本号

class CLine :public CObject
{
    DECLARE_SERIAL(CLine)
public:
    CPoint m_ptFrom;
    CPoint m_ptTo;
    COLORREF m_clrLine;
public:
    CLine(){}
    CLine(CPoint from, CPoint to)
    {
        m_ptFrom = from;
        m_ptTo = to;

    }

    CLine(CPoint from, CPoint to,COLORREF color)
    {
        m_ptFrom = from;
        m_ptTo = to;
        m_clrLine = color;

    }
    

    void Serialize(CArchive &ar);


};


line.cpp

#include "pch.h"
#include "line.h"

IMPLEMENT_SERIAL(CLine, CObject, 2|VERSIONABLE_SCHEMA);  //版本化的,di2个版本
void CLine::Serialize(CArchive &ar)
{
    CObject::Serialize(ar);
    if (ar.IsStoring())
    {
        ar << m_ptFrom << m_ptTo<<m_clrLine;
    }
    else
    {
        UINT nSchema = ar.GetObjectSchema();
        switch (nSchema)
        {
        case 1:
            ar >> m_ptFrom >> m_ptTo;
            m_clrLine = RGB(0, 0, 0);
            break;

        case 2:
            ar >> m_ptFrom >> m_ptTo>> m_clrLine;
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值