我正在尝试使用LLVM,但现在我陷入了为类生成代码的困境。
如何使用LLVM创建类的功能?
- 类操作符是否像函数一样处理?
- 自动分配如何处理(如C ++)?
- 如何支持接口,例如Java通过类似C ++的虚拟继承?
一个简单的方法是创建结构体,然后将方法建模为常规函数,该函数接收指向表示包含类的结构体的指针 - 实质上是一个this
指针 - 作为第一个参数。可以通过分配结构体,然后在分配的数据上调用特殊的初始化函数 - 真正的构造函数 - 来对其进行建模。
继承可以通过构建一个包含特殊“父级”字段(或多个字段,用于多重继承)的结构体来完成,该字段的类型与基类的结构体类型相同。
阅读有关虚拟表的内容;我认为这是最好的起点。您可能会发现编译器基本上:
使用C++中的类编写一些代码,然后使用Clang将其编译为LLVM IR,查看生成的代码。
clang++
,并在通用C++中编写类。 - leftaroundabout