免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hongyunqi
打印 上一主题 下一主题

自动打印struct中的内容 [复制链接]

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
41 [报告]
发表于 2010-09-04 11:42 |只看该作者

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
42 [报告]
发表于 2010-09-04 11:51 |只看该作者
本帖最后由 yulihua49 于 2010-09-04 11:55 编辑
    我的基本思路是这样的。
写一个模板。

比如:

原:struct man

{
      char name[21];
      int age;
};

#include <pack.h>

T_PkgType man_tpl[]={
      {CH_CHAR,21,"name",0,-1},
      {CH_INT,sizeof(int),"age"},
      {-1,0,0,0}
};

然后,有一对与字符串互转的程序,你提供它结构,模板,buff,它给你转到buff去,你打印,存取或网络传输,都可以。

如:
struct man m;
char buff[256];
     strcpy(m.name,"myname");
     m.age=30;
     pkg_pack(&buf,&m,man_tpl,'|');
     printf("m=%s\n",buff);

结果:
myname|30|yulihua49 发表于 2010-09-04 11:38

为每个结构配模板,不是很繁嘛?就采用元数据man.meta:

TEMPLATE man 2
neme:=CH_CHAR 21
age:=CH_INT

经过模板生成器:
mktpl
请输入元数据文件名:man.meta

就生成了前边的结构和模板。拿到C程序里用即可。

这就是元编程的一种方法,目前已实现,开源的。

如果是数据库里的表,元编程也省了。直接可以生成对应的结构和模板。

论坛徽章:
0
43 [报告]
发表于 2010-09-04 13:01 |只看该作者
回复 42# yulihua49


    你说的mktpl是个什么东西,自己开发的?

论坛徽章:
0
44 [报告]
发表于 2010-09-04 13:57 |只看该作者
回复 42# yulihua49


    你的mktpl必须先有元数据文件,可我们的需求是先有struct,是要解析struct

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
45 [报告]
发表于 2010-09-04 14:07 |只看该作者
C 程序员的通病就是把简单的问题复杂化。

又没让你解析全世界的 struct,你怕啥啊?

元编程也可以自己注册新类型的啊。
不一定看到 _u16 就一定要找到类型推导过程,
你直接注册一个 _u16 到 %u 的映射不就完了?

真受不了你们。有这点时间,早完成了。

论坛徽章:
0
46 [报告]
发表于 2010-09-04 14:27 |只看该作者
不做类型推导你怎么知道_u16就是用%u
人看着差不多能判断出来,可程序判断不出来啊

除了_u16还有更多别的奇怪的名字呢。

论坛徽章:
0
47 [报告]
发表于 2010-09-04 15:44 |只看该作者
学习一下

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
48 [报告]
发表于 2010-09-04 17:28 |只看该作者
本帖最后由 yulihua49 于 2010-09-04 17:39 编辑
回复  yulihua49


    你的mktpl必须先有元数据文件,可我们的需求是先有struct,是要解析struct
hongyunqi 发表于 2010-09-04 13:57



  换 一个思维方法吧,所有应用逻辑的数据,都可以先定义元数据。
当然,更好的做法是先定义数据库表,然后结构和模板自动生成。
元数据主要用于非数据库的数据或对应的不是单个表的数据。

你说,我如果已经写成了许多结构怎么办?一个想法,反解析C源码,生成模板或元数据。
没有这个软件前,你只好手写模板,或看着结构写元数据还简单些。

自从有了这个工具,从来不写结构,都是自动或半自动生成的。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
49 [报告]
发表于 2010-09-04 17:32 |只看该作者
回复  yulihua49


    你说的mktpl是个什么东西,自己开发的?
hongyunqi 发表于 2010-09-04 13:01



    自己开发的,有源码。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
50 [报告]
发表于 2010-09-04 17:36 |只看该作者
C 程序员的通病就是把简单的问题复杂化。

又没让你解析全世界的 struct,你怕啥啊?

元编程也可以自己 ...
flw 发表于 2010-09-04 14:07



    什么叫全世界的?我们每开发一个应用就面对数百个各种不同的结构,当然要寻找一种通用的方法啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP