1

C プログラミング言語には、 Java の Object クラスに似たものがありますか? C などの低水準言語でこのようなものを実装するのは難しいと思いますが、それでも非常に役立つと思います。C に型のようなものがない場合、C で Java の型Objectを模倣する方法はありますか?Object

私が念頭に置いている主な使用例は、C で複数のプリミティブ型を持つ配列を作成して、Java で Object 配列を模倣することです。Object[] hasMultipleTypes = [3, "Hi!", 5.00];

4

1 に答える 1

2

基本的なオブジェクトはそれほど複雑ではありません - データ フィールドのセット ( struct) と仮想メソッド テーブル (VMT) へのポインターです。各メンバー関数は、最初の引数として「this」へのポインターを取ります。

Cで実装するのは比較的簡単です。オブジェクト指向コードをプレーンCに変換するという、まさにこれを行っていたC++用のオリジナルのクロスコンパイラの説明を探します。

おおよそのクラス:

struct MyClassVMT
 { 
    int *(method1)();
 }

struct MyClass 
{ 
  MyClassVMT* vmt;
  int field1;
}

void MyClass_Constructor(MyClass* pThis) { pThis.vmt = &_myClassVmt;}
void MyClass_nonVirtual (MyClass* pThis) {}
void MyClass_method1(MyClass* pThis) {}

MyClassVMT _myClassVmt;
_myClassVmt.mehtod1 = MyClass_method1;

// Usage
MyClass item;
MyClass_Constructor(&item);

MyClass_nonVirtual(&item); // non virtual method call
item.method1(&item); // virtual method call
于 2013-03-06T01:38:33.077 に答える