基本的なオブジェクトはそれほど複雑ではありません - データ フィールドのセット ( 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