标记联合体

来源:互联网 发布:mysql查看锁表情况 编辑:程序博客网 时间:2024/05/02 02:02

对于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

0 0
原创粉丝点击