分享

最便捷、最强大、速度最快的C++序列化框架2

 心不留意外尘 2016-05-23
     作者: 发表日期: 2009年01月02日 

http:///p/?p=56

目前该框架(DataIO)仅支持二进制。想起序列化支持只需要两个宏 DATA_IO_LOAD_SAVE / DATA_IO_LOAD_SAVE_V,对象成员基本上用“&”连接起来,这样,可以写一个简单的语法分析器,在序列化宏中将成员序列化表达转化成字符串,进行语法分析,这样,就可以在不用改变客户代码的情况下,进行文本方式(如XML)的序列化了,比 boost 的要简单许多。

例如,目前的宏这样定义:

C++
1
2
3
4
5
#define DATA_IO_LOAD_SAVE(Class, Members) \
    template void load(DataIO& dio) { dio Members; }      \
    template void save(DataIO& dio) const { dio Members; }    \
    DATA_IO_REG_LOAD_SAVE(Class)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

可以改成这样:

C++
1
2
3
4
5
6
7
8
9
10
#define DATA_IO_LOAD_SAVE(Class, Members) \
#define DATA_IO_LOAD_SAVE(Class, Members)   \
    template void load(DataIO& dio) { \
        static Grammar gram = dio.parse(#Members); \
        Loader ld(gram, dio); ld Members; } \
    template void save(DataIO& dio) const { \
        static Grammar gram = dio.parse(#Members); \
        Saver sv(gram, dio); sv Members; } \
    DATA_IO_REG_LOAD_SAVE(Class)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约