免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4456 | 回复: 17
打印 上一主题 下一主题

[C] 带条件的强制类型转换如何写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-09 15:41 |只看该作者 |倒序浏览
本帖最后由 newbuding 于 2010-06-10 15:41 编辑

有3个结构体,中有小部分成员相同
结构体a与结构体b为实类,结构体c为共同类,可以替代a或b。
当然结构体a和b不会像下面这么简单。
  1. struct a {
  2.   int type;
  3.   int count;
  4. };

  5. struct b {
  6.   int type;
  7.   int count;
  8. };

  9. struct c {
  10.   int type;
  11.   char data[max(sizeof(struct a),sizeof(struct b))-sizeof(int)];
  12. };
复制代码
能否实现宏ZZ(),或者函数ZZ()

  1. struct a test_a = { 1, 100};
  2. struct b test_b = { 2, 200};
  3. struct c test_c = (struct a)test_a;
  4. printf("%d\n", ZZ(test_c).count++);
复制代码
可以实现:根据type的不同,处理成不同的结构体。

论坛徽章:
0
2 [报告]
发表于 2010-06-09 16:22 |只看该作者
本帖最后由 newbuding 于 2010-06-10 15:41 编辑

关键就是最后一句

  1. printf("%d\n", ZZ(test_c).count++);
复制代码
要ZZ返回的是变量,而不是值,如何搞啊?

论坛徽章:
0
3 [报告]
发表于 2010-06-09 18:44 |只看该作者
为啥要用结构而不用联合?

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2010-06-09 20:52 |只看该作者
#define ZZ(x)   (&x)

论坛徽章:
0
5 [报告]
发表于 2010-06-09 20:59 |只看该作者
如4L,传地址然后判断type进行处理

论坛徽章:
0
6 [报告]
发表于 2010-06-10 00:11 |只看该作者
如4L,传地址然后判断type进行处理
bill15 发表于 2010-06-09 20:59



    关键的就是如何判断type,并继续处理?
而且处理后仍为变量,而不是值,允许对变量做进一步操作

论坛徽章:
0
7 [报告]
发表于 2010-06-10 00:15 |只看该作者
为啥要用结构而不用联合?
没本 发表于 2010-06-09 18:44



不用联合是因为:
我只知道剩余变量所占的大小,而不一定知道变量的名字

论坛徽章:
0
8 [报告]
发表于 2010-06-10 00:27 |只看该作者
这个数据结构的抽象是有问题的,count既然不是共有的属性,为啥要通过struct c来改变

论坛徽章:
0
9 [报告]
发表于 2010-06-10 10:31 |只看该作者
这个数据结构的抽象是有问题的,count既然不是共有的属性,为啥要通过struct c来改变
ehust_cu 发表于 2010-06-10 00:27


为什么说不是共有的属性呢?
结构体a和b都有count啊,只不过现实中可能count的类型不一样。
例如count有可能是int型的,还有可能是个double型的,或者是个struct。

论坛徽章:
0
10 [报告]
发表于 2010-06-10 12:22 |只看该作者
介绍一下其他的设计方案。
C的话有 VARIANT ,微软用于OLE/ActiveX
C++的话,Boost.Any和Boost.Variant
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP