#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。
答案 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()
对象。