У меня есть следующий код, который использовал std :: bind:
EventListenerCustom* _createNewObjectlistener =
eventDispatcher->addCustomEventListener(Constants::MY_EVENT,
std::bind(&MyClass::MyFunction, this, std::placeholders::_1));
Кажется, я создаю много разных типов слушателей объектов, где единственное отличие - это событие и вызываемая функция. Если бы я хотел инкапсулировать приведенный выше код в функцию:
- Как бы я передал MyClass :: MyFunction в качестве аргумента функции?
- Как будут выглядеть сигнатура и параметры функции?
Я полагаю, что функция будет выглядеть примерно так:
EventListenerCustom* MyFunc(<What Goes Here> functionToBeBound,<What goes here> object,std::string EVENT){
EventListenerCustom* eventListener = eventDispatcher->addCustomEventListener(EVENT, std::bind(functionToBeBound, object, std::placeholders::_1));
return eventListener;
}
Как должна выглядеть функция? И как я это называю? Как будет выглядеть код вызова?
РЕДАКТИРОВАТЬ: Конкретные детали:
У меня есть много объектов слушателей, которые созданы одинаковыми способами:
auto eventDispatcher = _dragNode->getEventDispatcher();
_createNewObjectlistener = eventDispatcher->addCustomEventListener(Constants::MY_EVENT, std::bind(&MyClass::myOtherFunction, this, std::placeholders::_1));
_moveNewObjectlistener = eventDispatcher->addCustomEventListener(Constants::MY_EVENT2 std::bind(&MyClass::myFunction, this, std::placeholders::_1));
Константы :: MY_EVENT и т. Д. Являются просто константными символами *.
Единственным отличием является вызываемая функция и строковая константа, используемая в качестве имени события. Как я могу заключить это в функцию? Ниже я попробовал решение Джона Цвинка, но по какой-то причине не могу его скомпилировать, потому что компилятор жалуется:
: No viable conversion from '__bind<void (*&)(cocos2d::EventCustom *), MyNameSpace::MyClass *, const std::__1::placeholders::__ph<1> &>' to 'const std::function<void (EventCustom *)>'