Я сейчас перехожу из C# в C++ и переписываю код игрового движка, и я думаю, что я на стене с tr1; По сути, я хочу, чтобы входной уровень вводился с сенсорного экрана, а затем запускал обратный вызов для уведомления о любых элементах, которые прослушивали этот вход. Теперь tr1/boost, похоже, делает это очень простым с помощью функции и связывает, однако обходные обратные вызовы, которые являются void(), не проблема, но теперь я пытаюсь передать параметры через этот обратный вызов при вызове (перечисления, например).Как использовать функцию tr1 и связывать функции с изменяющимися параметрами?
Проблема заключается в том, что когда я вызываю bind и вставляю параметр, он не действует как владелец места, а действует как постоянное значение, которое необходимо передать. Например мой код здесь:
Содержит класс:
tr1::function<void (MenuActions action)> callback;
callback = tr1::bind(&MenuScene::handleInputCallback, this, MenuActions::neutral);
m_menuUILayer->registerCallback(callback);
имеет намерение, что я создаю функцию и связывать его тогда RegisterCallback передает эту функцию обратного вызова в класс члена и сохраняет ссылку. Эта часть работает, но теперь в классе члена я могу вызвать функцию обратного вызова однако параметры по умолчанию всегда посланный ...
класса пользователя:
if (m_callback)
{
m_callback(MenuActions::backgroundTouchDown);
}
Так здесь, а не MenuActions :: backgroundTouchDown отправляется в основной содержащий класс в обратном вызове, по умолчанию используется MenuActions :: neutral. Мне интересно, если я что-то упустил, или, может быть, моя нехватка сна просто посылает меня по неправильному пути? Спасибо, парни!
Правильный синтаксис 'функция <аннулируются (MenuActions)> ', а не' function '. –
Nawaz
Что такое подпись 'MenuScene :: handleInputCallback'? – juanchopanza
@juanchopanza sig is ** void handleInputCallback (действие MenuActions) ** – JedH