В настоящее время я перехожу с C# на C++ и переписываю код игрового движка, и я думаю, что я у стены с tr1; По сути, я хочу, чтобы входной слой принимал ввод с сенсорного экрана, а затем запускал обратный вызов, чтобы уведомить любые элементы, прослушивающие этот ввод. Теперь tr1/boost, кажется, делает это очень простым с помощью function и bind, однако запуск обратных вызовов, которые являются void(), не проблема, но теперь я пытаюсь для отправки параметров в этот обратный вызов при вызове (например, перечисления).
Проблема здесь в том, что когда я вызываю 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 по умолчанию. Мне интересно, я что-то упускаю, или, возможно, недостаток сна просто направляет меня по ложному пути? Спасибо, парни!
function<void (MenuActions)>
, а неfunction<void (MenuActions action)>
. - person Nawaz   schedule 11.03.2013MenuScene::handleInputCallback
? - person juanchopanza   schedule 11.03.2013tr1::bind(&MenuScene::handleInputCallback, this, MenuActions::neutral);
дает вам объект функции без параметровfunction<void(void)>
. Это означает, что ответ @ForEver выглядит правильным. - person juanchopanza   schedule 11.03.2013