У меня есть следующий код:
_createNewObjectlistener = eventDispatcher->addCustomEventListener(Constants::EVENT_CREATE_OBJECT, std::bind(&ObjectPlacementManager::receiveCreateObjectEvent, this, std::placeholders::_1));
_eventListeners.insert(_createNewObjectlistener);
_moveNewObjectlistener = eventDispatcher->addCustomEventListener(Constants::EVENT_MOVE_NEW_OBJECT, std::bind(&ObjectPlacementManager::receiveMoveCurrentGameObjectEvent, this, std::placeholders::_1));
_eventListeners.insert(_moveNewObjectlistener);
.... many more listeners created
Поскольку единственное различие между кодом создания для каждого слушателя, это Constant::EVENT_NAME
и вызываемая функция, я пытаюсь инкапсулировать его в функцию.
Результат bind
должен иметь тип const std::function<void(EventCustom*)>&
Функции, подобные ObjectPlacementManager::receiveMoveCurrentGameObjectEvent
, имеют одинаковую подпись:
void receiveMoveCurrentGameObjectEvent(EventCustom* event){
....
}
Я пытался: Как передать аргумент в std :: bind функции?
typedef void (*callback_function)(EventCustom*);
EventListenerCustom* createCustomListener(callback_function func, std::string EVENT){
auto eventDispatcher = _dragNode->getEventDispatcher();
auto listener = eventDispatcher->addCustomEventListener(EVENT, std::bind(&func, this, std::placeholders::_1));
_eventListeners.insert(_createNewObjectlistener);
return listener;
}
Но я получаю ошибку:
No viable conversion from '__bind<void (**)(cocos2d::EventCustom *), bejoi::ObjectPlacementManager *, const std::__1::placeholders::__ph<1> &>' to 'const std::function<void (EventCustom *)>'
Я также попытался сделать функцию:
EventListenerCustom* createCustomListener(void* func, std::string EVENT){
auto eventDispatcher = _dragNode->getEventDispatcher();
auto listener = eventDispatcher->addCustomEventListener(EVENT, std::bind(func, this, std::placeholders::_1));
return listener;
}
Но я получаю ошибку:
No viable conversion from '__bind<void *&, mynamespace:: ObjectPlacementManager *, const std::__1::placeholders::__ph<1> &>' to 'const std::function<void (EventCustom *)>'