- 主题:C语言是怎么处理反射需求的?
可以实现stl。但是运行时解析还是不行。
【 在 tianyalaike 的大作中提到: 】
: 用宏,数组可以实现,网上有C++实现反射的思路,C来实现也一样
--
FROM 221.221.51.*
55楼的函数怎么实现?
【 在 gluon521 的大作中提到: 】
: C语言不需要反射,你可以直接读写内存
:
--
FROM 221.221.51.*
简单说,在运行时随便给你一个结构,如何知道它里边有哪些成员,都什么类型,有多长,存放在哪里。
JAVA是可以的。C不行。但是这个功能是很有用的。楼主的意思,怎么解决?
我的答案,自己补一个说明书。
哪怕是第三方软件定义的结构,都可以给它补个说明书,或称模板。
一个结构配一个模板,提交给泛型程序去处理。
【 在 il15 的大作中提到: 】
: 汗,看大家讨论了这么多页,还是不知道什么是反射。
: 不过 “结构体第一个byte标识数据类型”应该是种常见做法 ...
:
--
修改:ylh1969 FROM 221.221.51.*
FROM 221.221.51.*
有。手机不方便,等开电脑弄一点实例
【 在 il15 的大作中提到: 】
: 多谢!基本就用C,没用过其它语言...
: 然后不懂就继续问:能够举个简单的例子,说明一下“结构的成员类型,长度”有用的例子吗?
:
--
FROM 221.221.51.*
搞好了性能不低
【 在 mywindows 的大作中提到: 】
: 很多场合并不在乎这点性能损失
--
FROM 221.221.51.*
10年前,打过擂。
我用映射技术,C里做不了反射 用映射代替。
DB2数据库,速度是对手的40倍。
【 在 mywindows 的大作中提到: 】
: 很多场合并不在乎这点性能损失
--
FROM 221.221.51.*
55楼的函数,他是一个库函数。就是说,他在编译时,还不知道递给他的是什么结构。
需要把全部或指定的成员,以“名字:值”的形式,转换成JSON格式。
这个程序要取成员名,和值。
【 在 il15 的大作中提到: 】
: 多谢!基本就用C,没用过其它语言...
: 然后不懂就继续问:能够举个简单的例子,说明一下“结构的成员类型,长度”有用的例子吗?
:
--
FROM 221.221.51.*
第三方软件的用户接口函数,比如要传递一些数据进去,或结果出来。
【 在 il15 的大作中提到: 】
: 才看到你这个。如果是第三方软件那应该是不行了。
: 不过还是有那个疑问,就是这个结构在什么情形下要开放出来呢?
:
--
FROM 221.221.51.*
在网络间传递数据。结构数据基本没法传。一个原因是含有二进制信息,还有,不同系统和编译器,对相同的结构,布局并不相同,成员边界对齐方式不同。还有大小端的问题。那么,不同系统间互传信息,就需要序列化。JSON就是一种序列化方式、格式。
数据到达以后,还需要反序列化,把JSON转换回结构。那么,就需要另外一个函数:
JSON_to_struct(void *struct_p,JSON json);
序列化和反序列化,一对程序。
如果没有反射,那么,对于每一个结构,都要写一对程序。一个中型项目,处理百十来个结构是普普通通的。试想,百十来对程序。
还有对数据库的存取操作,这可是一大堆程序,那可就是百十来堆程序呀。
【 在 il15 的大作中提到: 】
: 之前看了你的这个例子,不大明白,现在又去查了下 JSON(见笑,第一次知道这个),有点理解了。
: 不过也还是有点疑问,struct_to_JSON() 主要的应用是什么呢?
: 另外,能不能做个在struct 里面加个函数回调指针来做这个事情呢?
: ...................
--
FROM 221.221.51.*
myself_to_JSON(),是个虚函数,被继承后要自己写的吧,100个结构就是100堆程序。
【 在 il15 的大作中提到: 】
: 之前看了你的这个例子,不大明白,现在又去查了下 JSON(见笑,第一次知道这个),有点理解了。
: 不过也还是有点疑问,struct_to_JSON() 主要的应用是什么呢?
: 另外,能不能做个在struct 里面加个函数回调指针来做这个事情呢?
: ...................
--
FROM 221.221.51.*