C 联合和多态

AFS*_*AFS 5 c polymorphism struct unions

可能的重复:
如何在 C 中模拟 OO 风格的多态性?

我正在尝试使用联合在 C 中创建多态性。我执行以下操作。

typedef struct{
...
...
} A;

typedef struct{
...
... 
} B;

typedef union{
        A a;
        B b;
}C;
Run Code Online (Sandbox Code Playgroud)

我的问题是:我怎么能有一个采用 C 类型但也允许 A 和 B 的方法。我希望以下内容起作用:

如果我定义一个函数:

myMethod(C){
...
}
Run Code Online (Sandbox Code Playgroud)

然后,我希望这个工作:

main(){
A myA;
myMethod(myA);
}
Run Code Online (Sandbox Code Playgroud)

它没有。有什么建议?

hro*_*tyr 4

GNU 和 IBM 支持transparent_union扩展:

typedef union __attribute__((transparent_union)) {
        A a;
        B b;
} C;
Run Code Online (Sandbox Code Playgroud)

然后你可以透明地使用As 或Bs 或Cs :

A foo1;
B foo2;
C foo3;
myMethod(foo1);
myMethod(foo2);
myMethod(foo3);
Run Code Online (Sandbox Code Playgroud)

请参阅透明_联合类型属性(仅限 C)。