Что делает ret reinterpret_cast?

#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 ответ

Решение

Является ли Dynamic() выполнением функции или конструкцией без аргументов в стеке объекта?

Это должно быть последнее, потому что тип возвращаемого значения определяемой функции также Dynamic,

Что такое ключевое слово ret?

Это не ключевое слово, это параметр, передаваемый макросу. Поиск Google обнаружил эти два варианта использования этого макроса:

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

В первом случае функция reinterpret_casts результат (inObj)->func() вызов функции к List_obj *, Чтобы код работал, Dynamic должен иметь неявный конструктор преобразования, который принимает List_obj *,

Во втором случае результат reinterpret_cast отбрасывается и создается по умолчанию Dynamic() объект возвращается.

Другие вопросы по тегам