Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;LLVM类功能_C++_Class_Llvm - Fatal编程技术网

C++ C++;LLVM类功能

C++ C++;LLVM类功能,c++,class,llvm,C++,Class,Llvm,我在玩LLVM,但现在我被困在为类生成代码 如何使用LLVM创建类功能 类运算符是否与函数一样处理 如何处理自动分配(如C++) 如何通过java等虚拟继承支持C++接口? 长版本 一般班级行为 一种简单的方法是创建结构,然后将方法建模为常规函数,这些函数接收指向表示包含类的结构的指针(本质上是thispointer),作为第一个参数。可以通过分配结构,然后对分配的数据调用一个特殊的初始化函数(实际上是构造函数)来对分配进行建模 继承可以通过构建一个结构来完成,该结构包含一个特殊的“父”字段(

我在玩LLVM,但现在我被困在为类生成代码

如何使用LLVM创建类功能

  • 类运算符是否与函数一样处理
  • 如何处理自动分配(如C++)
  • 如何通过java等虚拟继承支持C++接口?
长版本 一般班级行为 一种简单的方法是创建结构,然后将方法建模为常规函数,这些函数接收指向表示包含类的结构的指针(本质上是
this
pointer),作为第一个参数。可以通过分配结构,然后对分配的数据调用一个特殊的初始化函数(实际上是构造函数)来对分配进行建模

继承可以通过构建一个结构来完成,该结构包含一个特殊的“父”字段(或多个字段,用于多重继承),其类型与基类的结构类型相同

多态性 了解虚拟表;我认为这是最好的起点。您可以发现编译器基本上:

  • 在内存中创建静态表,从函数“名称”映射到其实现
  • 添加指向指向此类表的类结构的指针
  • 无论何时调用虚拟方法,都会将其编译为间接调用,从而从相应的虚拟表条目中取消引用地址
  • 短版
    < >编写C++中使用类的代码,然后用Clang编译成LLVM IR,并查看生成的代码。你是在手工编写中间形式的LLVM字节码,还是什么?好吧,我不认为它是以这种方式使用的,也许除了一些关键的优化,人们可能也会这样写。对于类的高级,使用适当的前端,最明显的是代码> CLAN++/COD>,用C++编写类。我编写的编程语言接近于非常简化的java。因此,我需要手工编写类功能,将其连接到我的解析器。您需要将类解压缩到更低级的东西。你曾经用C写过OO代码吗?它非常麻烦,但很有效,让您了解如何在编译器中实现类那么,这个问题实际上与LLVM没有多大关系。尽管事实上,我认为LLVM确实具有优化典型类实现中出现的特定模式的功能,因此标记可能仍然是相关的。不过我对此一无所知。谢谢,我会调查的!谢谢你,这正是我所需要的!