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;

A次に、 sまたはBsまたはCsを透過的に使用できます。

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では、1つしか持つことができませんmyFunction()。関数を宣言してABまたはC(たとえばvoid*)を取ることができたとしても、3つのうちどれが提供されているかを知る方法はありません。

于 2012-05-23T10:37:00.243 に答える