- 主题:如何写一个函数能够序列化任意结构
这不就是meta data么?不还是反射那一套么?
【 在 ylh0315 的大作中提到: 】
: 但是我做到了,利用映射机制,就是写一个结构说明书。
: 这办法对于已经存在的第三方软件的已知结构也适用,给它写个说明书。就是template。
--
FROM 101.88.156.*
是。但是C语言没有反射功能。即编译后没有保留结构的信息。(确切说,运行时是没有结构这个概念的,其实只是变址访问内存而已)
所以需要补充meta信息。模板就是补全这个信息。
技术要点是offset的计算,攻克这点,其他没难度。模仿编译器的各种类型的对齐规则。
其中一部分内容就是逼迫编译器,交出他的对齐规则。
【 在 rexxie 的大作中提到: 】
: 这不就是meta data么?不还是反射那一套么?
:
--
修改:ylh0315 FROM 221.221.50.*
FROM 221.221.50.*
看风格了,我这里写的底层DB喜欢用0长度数组,使用时再决定长度
还喜欢隐藏类成员,对外ClassA仅有接口,对内ClassAImp才有数据
外面不可见Imp,只能使用接口
这种管理方式,啥外部的序列化都没戏,只能自己玩
不过大都使用自己管理的页面,直接把页面写入写出,反而很高效
【 在 ylh0315 的大作中提到: 】
: 是。但是C语言没有反射功能。即编译后没有保留结构的信息。(确切说,运行时是没有结构这个概念的,其实只是变址访问内存而已)
: 所以需要补充meta信息。模板就是补全这个信息。
: 技术要点是offset的计算,攻克这点,其他没难度。模仿编译器的各种类型的对齐规则。
: ...................
--
FROM 111.197.236.218
0长度数组我也经常用,模板系统也需要这个技术。
成组访问数据库,就是批量操作,就需要结构数组。其大小不定。
处理方法是,从模板取出结构总长度,乘以记录数,按这个分配空间,进行批量操作。
可以进行的操作:
select,insert,update,delete。
操作时需要批量绑定变量,绑定变量就在这个数组的区域内。
这种批量操作,不使用结构数组是非常困难的。
比如1000个记录的150个字段的数组,只需绑定150次。如果使用离散变量,需绑定150000次,就如JAVA批量访问数据库就是这样。所以C,C++用模板批量访问数据库,效率要比JAVA高很多。
【 在 jjfz 的大作中提到: 】
: 看风格了,我这里写的底层DB喜欢用0长度数组,使用时再决定长度
: 还喜欢隐藏类成员,对外ClassA仅有接口,对内ClassAImp才有数据
: 外面不可见Imp,只能使用接口
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
每一个表或者SQL语句都需要单独的程序处理。
我这个,有时需要共性处理,比如去除重复数据的程序,有6个表需要这个操作,一般情况就是6个程序(随着业务发展可能还会增加表。这些表的结构不尽相同)。
我这里就是一个程序,6个表,把各自的数据和模板带来就行了,处理是一样的。
就如同这贴标题,处理序列化这个功能,一个程序就够了,各自的结构各自带模板来,处理是一样的。见23楼。
所以模板的意义在于程序的通用性。所有需要通用处理结构的问题,都可以由模板来解决。
否则,你有100个结构要处理,就得写100个程序。有N种处理,就得写100N个程序。
【 在 jjfz 的大作中提到: 】
: 看风格了,我这里写的底层DB喜欢用0长度数组,使用时再决定长度
: 还喜欢隐藏类成员,对外ClassA仅有接口,对内ClassAImp才有数据
: 外面不可见Imp,只能使用接口
: ...................
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*
如果一个结构就有1T大,那确实处理不了,得想办法改变设计。
现在最好一个结构不超过2G,还是可以想想办法处理的。
【 在 allegro 的大作中提到: 】
: 序列化,反序列化有没有人实现过这这个功能:
: 对于struct A,序列化后会生成一个极其长的byte stream,比如1TBytes大小。
: 然后把这个1T写入存储。
: ...................
--
FROM 221.221.50.*
C++还真有个ABI,要不是今天早晨读了些还要被你们骗了
呜呜呜,世界上坏人真多
【 在 ylh0315 的大作中提到: 】
: 是。但是C语言没有反射功能。即编译后没有保留结构的信息。(确切说,运行时是没有结构这个概念的,其实只是变址访问内存而已)
: 所以需要补充meta信息。模板就是补全这个信息。
: 技术要点是offset的计算,攻克这点,其他没难度。模仿编译器的各种类型的对齐规则。
: ...................
--
FROM 218.67.252.*
???我怎么骗你了?
【 在 tgfbeta 的大作中提到: 】
: C++还真有个ABI,要不是今天早晨读了些还要被你们骗了
: 呜呜呜,世界上坏人真多
--
FROM 221.221.50.*
一个讨论技术的贴,怎么骗你了?能损害你啥利益,我又能获得啥利益?怎么就是坏人了?你得说清楚。
【 在 tgfbeta 的大作中提到: 】
: C++还真有个ABI,要不是今天早晨读了些还要被你们骗了
: 呜呜呜,世界上坏人真多
--
FROM 221.221.50.*
坚决反对在讨论技术时无端进行人身攻击。
【 在 tgfbeta 的大作中提到: 】
: C++还真有个ABI,要不是今天早晨读了些还要被你们骗了
: 呜呜呜,世界上坏人真多
--
FROM 221.221.50.*