- 主题:C语言是怎么处理反射需求的?
code generation可解,参考thrift protobuf
【 在 dylen (大海之子) 的大作中提到: 】
: rt
: 这个版应该有人知道吧?
: 谢谢啦
: --
--
FROM 111.197.234.188
判断一下,有就调用,没有就用别的办法
【 在 wjhtingerx (ca6140) 的大作中提到: 】
: 反射为啥就知道了?
:
:
: 【 在 e729 的大作中提到: 】
--
FROM 111.193.121.*
手撸内存模拟反射?
【 在 siegfried415 (更号2) 的大作中提到: 】
: 在C语言中,struct是一个面向程序员的概念,在编译好的代码中struct只是一小段连续的内存,访问struct成员只是是用内存地址+成员偏移来完成的,这意味着编译好的代码中完全没有struct的概念,所以在C语言中是无法完成所谓的反射操作的。。。
:
: 【 在 littleSram 的大作中提到: 】
: : 反射在JAVA里通常用来看class的定义,比如成员变量的名字和类型,
--
FROM 111.193.121.*
反射,就是取得对象的成员,其名称属性位置都是提供的。可惜C没有。
【 在 ztysys 的大作中提到: 】
: 但类名、需要的方法和属性也都是知道的
: 否则还是没法用
: 反射,说到底,还是对已知的类的调用,只是不知道方法和属性的偏移量而已,这时候编译执行器就弥补不足了,因为天生就是干这个的
: ...................
--
FROM 221.221.52.*
是一种方法。
但是:如果序列化/反序列化的格式不同,就需要生成太多的程序。
如:字符串格式,JSON格式,XML格式等等。
更有甚者,序列化/反序列化的发展------ORM,Object Relational Mapping, 把关系数据库的表,映射成Object,在C里,就是struct。实质上是struct对关系数据库的序列化/反序列化操作,这中间有太多的操作,代码生成太困难了。
所以,给结构补一张说明书。这说明书说明每个成员的:类型,长度,名称,格式,offset,还有一个bind,说明与关系数据库的对应关系。
【 在 Tyo 的大作中提到: 】
: code generation可解,参考thrift protobuf
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
这有啥困难的,
没写过 db2 的 sqc 和 oracle 的 pc?
【 在 ylh1969 (没谱) 的大作中提到: 】
: 更有甚者,序列化/反序列化的发展------ORM,Object Relational Mapping, 把关系数据库的表,映射成Object,在C里,就是struct。实质上是struct对关系数据库的序列化/反序列化操作,这中间有太多的操作,代码生成太困难了。
--
FROM 27.38.197.*
都写过。但是那不是ORM。
我用的是OCI,和DB2的CLI。
这比PROC的效率高得多,测试过,效率大约2.5倍。
而且,OCI经过包装,使用很简便。基本不用写SQL语句。有点像JAVA的HIBERNATE,只写HQL。
而且,软件在DB2与ORACLE之间的转换,分分钟的事,换个库,编译一下就行。
【 在 flw 的大作中提到: 】
: 这有啥困难的,
: 没写过 db2 的 sqc 和 oracle 的 pc?
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
那么,OCI为什么一定要结构映射呢?
那是因为高效率的插入、修改操作,需要组织成数组,进行成组操作,结构数组是最方便的啦。
离散变量的数组,没办法写出通用的程序。
每一个成组插入,都要写一个程序。相当繁琐。
例如:
int array_insert(DAU,array,num);
DAU,Data Access Unit.里边有:表名,结构说明书,数据结构,游标,数据库句柄等等。(ORACLE与DB2的区别,仅在于数据库句柄不同)
array,你要插入的结构数组
num,数组的数量。
没有ORM,写不出这个程序。
【 在 flw 的大作中提到: 】
: 这有啥困难的,
: 没写过 db2 的 sqc 和 oracle 的 pc?
:
--
FROM 221.221.52.*
DAU可以由数据库的数据字典自动生成。包括里边的结构和说明书。
这些就是protobuf做不到的啦。
DAU_mk(&DAU,SQL_Connect,table_name);制造DAU,用数据库句柄,表名为。。。。
怎么样?比PROC简单吧?而且效率还非常之高。
在C++里,这个是new的过程。
【 在 flw 的大作中提到: 】
: 这有啥困难的,
: 没写过 db2 的 sqc 和 oracle 的 pc?
:
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*
楼猪是要关公战秦琼,你咋不让c语言浏览器执行下呢
--
FROM 144.123.182.*