标记联合体

本文讨论了C语言中typedef相互嵌套的问题以及如何通过标记联合体(tagged union)来实现类似Java的多态性。通过在最前面声明Exp_time,使编译器理解Exp的含义。标记联合体允许用一个基类Exp表示所有子类,如add和times,Exp.T用于代表所有子类。在C语言实现中,使用Exp结构时需要根据enum类型判断联合体内实际内容。
摘要由CSDN通过智能技术生成

对于typedef的相互嵌套的问题,把哪个放在前面都不行。

解决办法。

在最先面先声明一下。

这样在Exp_time里面编译器就知道Exp是什么意思了。





用编辑联合体可以做出类似java的多态。也就是可以用一个基类表示所有可能的子类。


上面的这个关系也是用Exp表示一种抽象的运算, 而add和times是两个子类,是具体的。可以用Exp.T代表所有子类。


当用C语言实现的时候,么每次使用Exp这种结构的时候,都要先判断里面的enum是那种类型,enum标记了联合体里面具体是什么。

标记联合体的框架

struct tag_union

{

      enum Kind;

      union

              {

                  primitive type...

                  struct...(具体类型,而不是指针)

              }u;

}











C语言实现版本:


http://git.oschina.net/qcliu/testC/blob/master/tag_union.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值