对于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语言实现版本: