- 主题:如何写一个函数能够序列化任意结构
你用JAVA就行。问题是,许多系统不可能用JAVA重写。
却可以配上模板增强柔性。
我也确实弄过JAVA的,序列化还是需要提供一个列表,说明需要操作的成员。
反序列化json比较省事。但是反序列化csv,依然需要成员名列表。
【 在 tortelee 的大作中提到: 】
: 跟你们讲个成熟的方法,就是重新发明一种语言,简单的,然后需要序列化的,你都用这种语言。 再把这个语言转成c++. 解析的过程你是可以控制的,在这个过程,获取类的信息等。
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
我做的也包括这个,写一个元数据转换器,把元数据转换成struct和template。
很简单。不需要新语言。
没有用struct生成template的原因是,template是基于数据库的,数据类型比struct丰富得多。
比如时间日期类型,可以对应char[],但是有不同格式,字节数不同。
还可以对应成整型,表示从时间原点到某时刻的天数,分钟数,秒数,微秒数。
所以,在template里还有格式的表述,这些在struct里是没有的。
因此,即使在JAVA里,还是给配了一些模板工具来处理这些问题。反射,只解决了数据类型和位置,解决不了格式问题。
原来还想做DECIMAL类型及其算法,比较依赖数据库,后来没有做。
【 在 tortelee 的大作中提到: 】
: 跟你们讲个成熟的方法,就是重新发明一种语言,简单的,然后需要序列化的,你都用这种语言。 再把这个语言转成c++. 解析的过程你是可以控制的,在这个过程,获取类的信息等。
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
现在 Java 早就不用了。
直接传个 Object 给序列化库,就会用反射把需要序列化的字段给找出来。
好一点的序列化库找到需要序列化的字段以后还会为这个类型生成对应的序列化字节码,再加上 JIT,速度暴快。
【 在 ylh1969 的大作中提到: 】
: 你用JAVA就行。问题是,许多系统不可能用JAVA重写。
: 却可以配上模板增强柔性。
: 我也确实弄过JAVA的,序列化还是需要提供一个列表,说明需要操作的成员。
: ...................
--
修改:hgoldfish FROM 27.152.53.*
FROM 27.152.53.*
弄过,还是需要列出成员名。
否则不知道弄哪个。还需要说明格式。
比如,一个整数,序列化成 YYYY-MM-DD的日期格式。
或者反之。
参见58楼模板和57楼数据。
【 在 hgoldfish 的大作中提到: 】
: 现在 Java 早就不用了。
: 直接传个 Object 给序列化库,就会用反射把需要序列化的字段给找出来。
: 好一点的序列化库找到需要序列化的字段以后还会为这个类型生成对应的序列化字节码,再加上 JIT,速度暴快。
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
你这个跟我非常接近了,我也考虑过用tuple存储模板。
用c一个是因为时间早,最早在95年,服务器是c,小型机,客户端是C++,windows,必须考虑2用。
还有,使用struct比较容易计算offset,cpp的class,有时会塞给你构造函数和析构函数,offset计算不靠谱。
我所说的序列化反序列化泛指,to_Json,to_CSV,to_XML,TO_SQL,,,,
【 在 DoorWay 的大作中提到: 】
: 你有一篇博客在完整的描述这个方案吗?
: 我也做过一个类似的,读sqllite的表结构,每张表生成一个对应的结构体,带From/To函数。
: 当时的需求是xml。
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
你这个太专业了,不是所有人都会用。
我说过是模板库,.a或.so,include .h,-l库即可,任何稍有基础的都会用,我带过若干课题组,培训半天基本都能掌握。
完整的方案,,,这个东西是一点点搞起来的,有使用手册。可以到QQ群,SDBC技术群,到文件区下载文档和源码,以及部分工具和例子,开源。
进群请说明技术目的。
【 在 DoorWay 的大作中提到: 】
: 你有一篇博客在完整的描述这个方案吗?
: 我也做过一个类似的,读sqllite的表结构,每张表生成一个对应的结构体,带From/To函数。
: 当时的需求是xml。
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*