C 编程语言有什么类似于Java 的 Object 类吗?我意识到用 C 等低级语言实现这样的东西是很困难的,但我认为它可能仍然非常有用。如果没有像 C 中的Object
类型,那么有没有办法Object
在 C 中模仿 Java 的类型?
我想到的主要用例是在 C 中创建具有多种基本类型的数组,以模仿 Java 中的 Object 数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];
C 编程语言有什么类似于Java 的 Object 类吗?我意识到用 C 等低级语言实现这样的东西是很困难的,但我认为它可能仍然非常有用。如果没有像 C 中的Object
类型,那么有没有办法Object
在 C 中模仿 Java 的类型?
我想到的主要用例是在 C 中创建具有多种基本类型的数组,以模仿 Java 中的 Object 数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];
基本对象不是很复杂 - 一组数据字段 ( 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