Ç联盟和多态性[重复](C Unions and Polymorphism [duplicate])

2019-07-29 12:08发布

可能重复:
我如何可以模拟用C OO风格多态性?

我试图用工会创建多态性C.我这样做。

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

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

typedef union{
        A a;
        B b;
}C;

我的问题是:我怎么能有一个需要C型的方法,但允许A和B的也。 我想下面的工作:

如果我定义一个函数:

myMethod(C){
...
}

那么,我想这工作:

main(){
A myA;
myMethod(myA);
}

事实并非如此。 有什么建议?

Answer 1:

GNU和IBM支持transparent_union扩展:

typedef union __attribute__((transparent_union)) {
        A a;
        B b;
} C;

然后你可以使用A S或B S或C小号透明:

A foo1;
B foo2;
C foo3;
myMethod(foo1);
myMethod(foo2);
myMethod(foo3);

看到该transparent_union类型属性(仅C) 。



Answer 2:

你必须使用显式类型转换:

A myA;
myMethod((C) myA);


Answer 3:

简短的回答是,在C,你不能。

在C ++中,你可以重载myFunction()并提供几种实现。

在C语言中,你只能有一个单一的myFunction() 即使你可以声明函数,以便它可以采取ABC (例如,作为void* ),它将无法知道是哪三个,已经有供应的方式。



文章来源: C Unions and Polymorphism [duplicate]