#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.
Является ли Dynamic () выполнением функции или конструкцией без аргументов в стеке объекта?
Это должно быть последнее, потому что тип возвращаемого значения определяемой функции также Dynamic
,
Что такое ключевое слово ret?
Это не ключевое слово, это параметр, передаваемый макросу. Поиск Google обнаружил эти два случаи применения этого макроса:
HX_DEFINE_DYNAMIC_FUNC0(List_obj,first,return)
HX_DEFINE_DYNAMIC_FUNC0(List_obj,clear,(void))
В первом случае функция reinterpret_cast
s результат (inObj)->func()
вызов функции к List_obj *
, Чтобы код работал, Dynamic
должен иметь неявный конструктор преобразования, который принимает List_obj *
,
Во втором случае результат reinterpret_cast
отбрасывается и создается по умолчанию Dynamic()
объект возвращается.
Других решений пока нет …