2013-05-16 5 views
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.Что делает ret reinterpret_cast?

  1. Является ли динамическим() выполнение функции или это конструкция без аргументов в стеке объекта?
  2. Что такое ключевое слово ret?
  3. Если 1 правильно, как результат выполнения функции передан?
+3

Это макрос, который расходуется на функцию. 'ret' - это не ключевое слово, а параметр, переданный макросу. –

+0

Не могу поверить, что я этого не видел :(Sry! – MetaChrome

+2

http://en.cppreference.com/w/cpp/language/reinterpret_cast –

ответ

3

динамичен() казнь функции или это без аргументов строительство на стек объект?

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

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

Это не ключевое слово, это параметр, переданный макросу. Поиск Google оказался эти два 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().

Смежные вопросы