Критика по поводу стиля кодирования cocos2d-x — C-style бросает против static_cast

В Cocos2D-X исходный код есть некоторый код, который обрабатывает указатели на функции-члены, показанные ниже.

...
#define     menu_selector(_SELECTOR)   (SEL_MenuHandler)(&_SELECTOR)
...
typedef void(CCObject::*    SEL_MenuHandler )(CCObject *)
...

Идея, которую я собираю, состоит в том, чтобы использовать menu_selector(<MyClass>::<MyFunction>) получить совместимый указатель на функцию. Но Я считаю, что использование приведения в стиле C позволяет им выполнять небезопасные приведения и приводить к возможному неопределенному поведению.. Я здесь не прав?

Только что у моего коллеги возникла проблема с кодом ниже

class HelloWorld:public CCObject{

void function();

}

....., menu_selector(HelloWorld::function)); //last arg to another function call

Этот код выдал ошибку недопустимого преобразования на VS2010, так как CCObject * параметр обязателен, но не на компиляторах IOS или Android (не знаю, сколько лет мобильным компиляторам). Я сам проверил это с некоторым похожим кодом и фактически получил его для компиляции с VS2010 ..

Я спрашиваю, есть ли причина cocos2d-x использует (TYPE) вместо static_cast<TYPE>? static_cast заблокировал бы все такие незаконные забросы. Это потому что static_cast заблокирует преобразование из (HelloWorld::*...) в (CCObject::*...)?

Редактировать: Преобразование указателя функции производного класса в указатель функции базового класса static_cast кажется законным, так что я не знаю, почему они выбирают (TYPE),

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]