我的技术规范

C/C++, Algorithm
随笔 - 11, 文章 - 7, 评论 - 1, 引用 - 0
数据加载中……

编译器程序在序列化文件时的两种数据格式,一种可行的方法,分硬盘存储格式,和下载格式


这里以 MFC 为例,标准 C++ 同样适用,替换成相应的 std::iostream 即可。

class MydataBaseHardware {
public:
    int d;
};

CArchive& operator<<( CArchive& ar, MydataBaseHardware& data) 
{
    return ar << (WORD)data.d;
}

CArchive& operator>>( CArchive& ar, MydataBaseHardware& data) 
{
    WORD d;
    ar >> d;
    data.d = d;
    return ar;
}

class MydataBase : public MydataBaseHardware{};

CArchive& operator<<( CArchive& ar, MydataBase& data) 
{
    return ar << data.d;
}

CArchive& operator>>( CArchive& ar, MydataBase& data) 
{
    return ar >> data.d;
}


















class MydataHardware {
public:
    int a;
    int b;
    int c;

    MydataBase base;
};

CArchive& operator<<( CArchive& ar, MydataHardware& data) 
{
    return ar << (WORD)data.a << (WORD)data.b << (WORD)data.c << (MydataBaseHardware)data.base;
}

CArchive& operator>>( CArchive& ar, MydataHardware& data) 
{
    WORD a, b, c;
    ar >> a >> b >> c;
    data.a = a;
    data.b = b;
    data.c = c;

    ar >> (MydataBaseHardware)data.base;
    return ar;
}

class Mydata : public MydataHardware{};

CArchive& operator<<( CArchive& ar, Mydata& data) 
{
    return ar << data.a << data.b << data.c << data.base;
}

CArchive& operator>>( CArchive& ar, Mydata& data) 
{
    return ar >> data.a >> data.b >> data.c >> data.base;
}







void CMyDoc::Serialize(CArchive& ar)
{
    Mydata data;
    MydataHardware& hd = data;

    if (ar.IsStoring())
    {
        // TODO: add storing code here
        ar << hd;
    }
    else
    {
        // TODO: add loading code here
        ar >> hd;
    }
}



posted on 2013-06-03 22:02 panchao 阅读(228) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理