1
#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? 的函数的执行?Dynamic 也是 hxcpp/haxe 的一个类(对于那些不熟悉的人)。

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

1 回答 1

3

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

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

ret 关键字是什么?

它不是关键字,而是传递给宏的参数。谷歌搜索出现了该宏的以下两个用例

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

在第一种情况下,函数reinterpret_casts 是对 a 的(inObj)->func()函数调用的结果List_obj *。要使代码正常工作,Dynamic必须有一个隐式转换构造函数,该构造函数采用List_obj *.

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

于 2013-05-16T21:49:15.883 回答