C联合和多态

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

 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() 。 即使您可以声明该函数以便它可以采用ABC (例如,作为void* ),它也无法知道它所提供的三个中的哪一个。