C语言中Java的Object类型的等价物

时间:2013-03-06 01:26:25

标签: c object

C编程语言是否与Java's Object class类似?我意识到用C等低级语言实现这样的东西是很困难的,但我认为它可能非常有用。如果在C中没有类似Object类型的内容,那么有没有办法在C中模仿Java的Object类型?

我想到的主要用例是在C中创建具有多个基本类型的数组,以模仿Java中的Object数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];

1 个答案:

答案 0 :(得分: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