5

可能重复:
如何在 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);
}

它没有。有什么建议么?

4

3 回答 3

4

GNU 和 IBM 支持transparent_union扩展:

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

然后您可以透明地使用As 或Bs 或s :C

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

请参阅transparent_union 类型属性(仅限 C)

于 2012-05-23T10:51:05.557 回答
0

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

A myA;
myMethod((C) myA);
于 2012-05-23T10:36:37.660 回答
0

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

在 C++ 中,您可以重载myFunction()并提供多个实现。

在 C 中,您只能有一个myFunction(). 即使您可以声明该函数以便它可以采用或(例如 as ) A,它也无法知道它提供了三个中的哪一个。BCvoid*

于 2012-05-23T10:37:00.243 回答