最便捷、最强大、速度最快的C++序列化框架【二】
目前该框架(DataIO)仅支持二进制。想起序列化支持只需要两个宏 DATA_IO_LOAD_SAVE / DATA_IO_LOAD_SAVE_V,对象成员基本上用“&”连接起来,这样,可以写一个简单的语法分析器,在序列化宏中将成员序列化表达转化成字符串,进行语法分析,这样,就可以在不用改变客户代码的情况下,进行文本方式(如XML)的序列化了,比 boost 的要简单许多。
例如,目前的宏这样定义:
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) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
可以改成这样:
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) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |