ret reinterpret_cast有什么作用?

时间:2013-05-16 21:31:01

标签: c++ haxe hxcpp

#define HX_DEFINE_DYNAMIC_FUNC0(class,func,ret) \
Dynamic __##class##func(hx::Object *inObj) \
{ \
      ret reinterpret_cast<class *>(inObj)->func(); return Dynamic(); \
}; \
Dynamic class::func##_dyn() \
{\
   return hx::CreateMemberFunction0(this,__##class##func); \
}

上面的CreateMemberFunction0是一个包含该函数信息的结构。函数__ ## class ## func可能在某个时刻被执行,其结果被传递给相关代码。但是,我对此感到困惑,因为看起来函数的执行会返回一个名为Dynamic的函数的执行?动态也是一个类(对于那些不熟悉的)与hxcpp / haxe。

  1. Dynamic()是一个函数的执行,还是一个对象堆栈上的无参数构造?
  2. 什么是ret关键字?
  3. 如果1是正确的,那么函数的执行结果是如何传递的?

1 个答案:

答案 0 :(得分:3)

  

Dynamic()是一个函数的执行还是对象堆栈上的无参数构造?

必须是后者,因为定义的函数的返回类型也是Dynamic

  

什么是ret关键字?

它不是关键字,而是传递给宏的参数。谷歌搜索出现了这个宏的两个use cases

HX_DEFINE_DYNAMIC_FUNC0(List_obj,first,return)
HX_DEFINE_DYNAMIC_FUNC0(List_obj,clear,(void))

在第一种情况下,函数reinterpret_cast(inObj)->func()函数调用List_obj *的结果。要使代码生效,Dynamic必须具有隐含的转换构造函数,该构造函数需要List_obj *

在第二种情况下,reinterpret_cast的结果将被丢弃,并返回默认构造的Dynamic()对象。