C编程语言是否与Java's Object class类似?我意识到用C等低级语言实现这样的东西是很困难的,但我认为它可能非常有用。如果在C中没有类似Object
类型的内容,那么有没有办法在C中模仿Java的Object
类型?
我想到的主要用例是在C中创建具有多个基本类型的数组,以模仿Java中的Object数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];
答案 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