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)
它没有。有什么建议?
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)。