- 主题:C语言是怎么处理反射需求的?
汗,看大家讨论了这么多页,还是不知道什么是反射。
不过 “结构体第一个byte标识数据类型”应该是种常见做法 ...
【 在 wdrq83 的大作中提到: 】
: 这个太简单了,结构体第一个byte标识数据类型即可
--
FROM 14.16.218.*
多谢!基本就用C,没用过其它语言...
然后不懂就继续问:能够举个简单的例子,说明一下“结构的成员类型,长度”有用的例子吗?
【 在 ylh1969 的大作中提到: 】
: 简单说,在运行时随便给你一个结构,如何知道它里边有哪些成员,都什么类型,有多长,存放在哪里。
: JAVA是可以的。C不行。但是这个功能是很有用的。楼主的意思,怎么解决?
: 我的答案,自己补一个说明书。
: ...................
--
FROM 14.16.218.*
之前看了你的这个例子,不大明白,现在又去查了下 JSON(见笑,第一次知道这个),有点理解了。
不过也还是有点疑问,struct_to_JSON() 主要的应用是什么呢?
另外,能不能做个在struct 里面加个函数回调指针来做这个事情呢?
比如
typedef struct _StructCommon {
int (*myself_to_JSON) (...);
} StructCommon;
struct A {
StructCommon SC;
// other members of A;
}
struct B {
StructCommon SC;
// other members of B;
}
int struct_to_JSON(StructCommon *pSC){
pSC->myself_to_JSON(...);
}
【 在 ylh1969 的大作中提到: 】
: 55楼的函数,他是一个库函数。就是说,他在编译时,还不知道递给他的是什么结构。
: 需要把全部或指定的成员,以“名字:值”的形式,转换成JSON格式。
: 这个程序要取成员名,和值。
--
FROM 14.16.218.*
才看到你这个。如果是第三方软件那应该是不行了。
不过还是有那个疑问,就是这个结构在什么情形下要开放出来呢?
【 在 ylh1969 的大作中提到: 】
: 每个成员都标?
: 我可是针对普通结构,甚至是第三方软件的结构,改不得的。
--
FROM 14.16.218.*
嗯,多谢!我大致理解了。
还有个问题(结合我之前听说的一些java的皮毛),这个需求 是不是相当于通过网络传一个文件,然后别的机器拿到这个信息后,重新编译?
【 在 ylh1969 的大作中提到: 】
: 在网络间传递数据。结构数据基本没法传。一个原因是含有二进制信息,还有,不同系统和编译器,对相同的结构,布局并不相同,成员边界对齐方式不同。还有大小端的问题。那么,不同系统间互传信息,就需要序列化。JSON就是一种序列化方式、格式。
: 数据到达以后,还需要反序列化,把JSON转换回结构。那么,就需要另外一个函数:
: JSON_to_struct(void *struct_p,JSON json);
: ...................
--
FROM 14.16.218.*