可能重复:
我如何可以模拟用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);
}
事实并非如此。 有什么建议?
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) 。
你必须使用显式类型转换:
A myA;
myMethod((C) myA);
简短的回答是,在C,你不能。
在C ++中,你可以重载myFunction()
并提供几种实现。
在C语言中,你只能有一个单一的myFunction()
即使你可以声明函数,以便它可以采取A
, B
或C
(例如,作为void*
),它将无法知道是哪三个,已经有供应的方式。