- 主题:如何写一个函数能够序列化任意结构
写一个函数:
struct_to_json(void* any_struct,JSON json,template describe)
然后,把json转换为字符串。
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
还有相反的函数。
【 在 ylh0315 的大作中提到: 】
: 写一个函数:
: struct_to_json(void* any_struct,JSON json,templet describe)
: 然后,把json转换为字符串。
--
FROM 221.221.50.*
但是我做到了,利用映射机制,就是写一个结构说明书。
这办法对于已经存在的第三方软件的已知结构也适用,给它写个说明书。就是template。
【 在 poikilotherm 的大作中提到: 】
: 没反射机制,做不到
: --
: 发自xsmth (iOS版)
--
FROM 221.221.50.*
但是只能映射C结构,C++里带函数不行。
【 在 ylh0315 的大作中提到: 】
: 但是我做到了,利用映射机制,就是写一个结构说明书。
: 这办法对于已经存在的第三方软件的已知结构也适用,给它写个说明书。就是template。
--
FROM 221.221.50.*
虽然写模板费一些精力,但是可以用于序列化和反序列化,以及各种数据格式转换。甚至可以进行SRM(Structure Relation Mapping)关系数据库映像,把关系表映射成结构。
【 在 ylh0315 的大作中提到: 】
: 但是只能映射C结构,C++里带函数不行。
--
FROM 221.221.50.*
是的。实际上是一套模板解释系统。
按照模板的指示,盲人摸象的按名称找到成员的位置,类型 长度,格式。
【 在 poikilotherm 的大作中提到: 】
: 你这不是还要依赖你的额外的结构说明书吗?
: --
: 发自xsmth (iOS版)
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
反正实现了,而且实现了第三方软件的数据结构的序列化反序列化。只利用它的.h,配一组模板。模板可以手写,也可以半自动或自动生成。
【 在 KillnCov 的大作中提到: 】
: 你这不叫做到。
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
是得知道。第三方软件也得给.h。按照.h写模板。
运行时没有struct呀,只有模板。
这个struct_to_json()写好了在.a或.so里。它不知道任何的结构,仅仅依据模板存取数据。所以是运行时模板,编译期是啥也不知道的。
【 在 RunningOn 的大作中提到: 】
: point就是你必须得知道结构体的定义啊。你如果能做到不需要知道定义,那就nb。
: 硬要说的话,用模板描述还不如用struct描述更方便呢。
: 就你说的这个问题而言,序列化、反序列化是核心,写数据库还是存文件这个是比较tr
: ...................
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
差不多。反推结构布局。待会发个东西看看。
【 在 hgoldfish 的大作中提到: 】
: 莫非是实现了 .c 的语法解析,根据 struct 反推?
:
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
我这个没有预编译。
先看一个结构:
extern T_PkgType st_tpl[];
typedef struct {
char c;
INT64 bi;
} st_stu;
extern T_PkgType ss_tpl[];
typedef struct {
char c;
st_stu s;
int i;
} ss_stu;
这两个都是普通的结构体,第二个是结构套结构。
这是一个.h,include到文件里即可。
【 在 hgoldfish 的大作中提到: 】
: 感觉可以啊。 c 语言是比较简单的,纯为这个目的写个这种解析器听起来并不难。github 上面看到一些 c 语言解析器的开源代码库或者 libclang 拿起来开干。唯一的麻烦是增加预编译步骤很多人不喜欢。
:
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*