- 主题:C语言是怎么处理反射需求的?
说对了。
实际上是做一个关于结构的说明书,程序按说明书操作。
我用一个结构数组来做。用vector可能更好。
【 在 flw 的大作中提到: 】
: 自己做个 map 类型就可以了。
: 这都是很常见的需求,有很常见的方案。
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
如果你整个数据结构用map来做,并不能覆盖全部需求。有些第三方软件,人家提供的.h,本身含有许多结构。这些既有结构需要序列化时,没办法改成map。
我的方案是:可以给他们写一个说明书,然后纳入通用序列化/反序列化程序。
最近做了一个掌纹识别系统,软件是第三方的,相关的数据结构需要在客户机,服务器间传送,就采用如上方法。
【 在 flw 的大作中提到: 】
: 自己做个 map 类型就可以了。
: 这都是很常见的需求,有很常见的方案。
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
每个需要反射的类型增加两个成员(数组),一个成员存放所有其他成员的名字,一个成员存放其他所有成员的偏移。
【 在 ylh1969 的大作中提到: 】
: 看24楼。
: 在JAVA里很容易实现:
: for 所有需要序列化的成员 {
: ...................
--
FROM 114.242.249.*
用反射的都是懒人,所有反射都没必要,你是否知道反射效率极低?
【 在 dylen 的大作中提到: 】
: rt
: 这个版应该有人知道吧?
: 谢谢啦
--
FROM 223.71.41.*
办法总比困难多,别气馁,方法多得很。
起码有三四种方法,具体情况具体分析,别人瞎猜也没用。
你看楼主一共也没说几句话,你猜的未必就比我猜的准。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 如果你整个数据结构用map来做,并不能覆盖全部需求。有些第三方软件,人家提供的.h,本身含有许多结构。这些既有结构需要序列化时,没办法改成map。
: 我的方案是:可以给他们写一个说明书,然后纳入通用序列化/反序列化程序。
: 最近做了一个掌纹识别系统,软件是第三方的,相关的数据结构需要在客户机,服务器间传送,就采用如上方法。
--
FROM 27.38.197.*
不能。这些个结构在第三方软件里用,不能编译原来的库,没有源码。
【 在 martinjspace 的大作中提到: 】
: 每个需要反射的类型增加两个成员(数组),一个成员存放所有其他成员的名字,一个成员存放其他所有成员的偏移。
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
嗯。
还一种方法,读.h,生成序列化反序列化代码。
【 在 flw 的大作中提到: 】
: 办法总比困难多,别气馁,方法多得很。
: 起码有三四种方法,具体情况具体分析,别人瞎猜也没用。
: 你看楼主一共也没说几句话,你猜的未必就比我猜的准。
: ...................
--
FROM 221.221.52.*
看24,26,28楼。
【 在 ylgao1987 的大作中提到: 】
: 用反射的都是懒人,所有反射都没必要,你是否知道反射效率极低?
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
事实上,我是把这些内容存放在另外的说明书里。这个说明书称为template,简称tpl。使用时与结构的地址一并提交。
int struct_to_json(void * xxx_stu,template * xxx_tpl,JSON json);
【 在 martinjspace 的大作中提到: 】
: 每个需要反射的类型增加两个成员(数组),一个成员存放所有其他成员的名字,一个成员存放其他所有成员的偏移。
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
但类名、需要的方法和属性也都是知道的
否则还是没法用
反射,说到底,还是对已知的类的调用,只是不知道方法和属性的偏移量而已,这时候编译执行器就弥补不足了,因为天生就是干这个的
不过既然是已知类,C也有简单办法搞定,但是需要调用方和被调用方配合,按某种约定暴露方法和属性的地址即可
【 在 ylh1969 的大作中提到: 】
: 不能。这些个结构在第三方软件里用,不能编译原来的库,没有源码。
--
FROM 183.192.42.*