我目前正从C#转到C ++并重写一些游戏引擎代码,我想我在tr1的墙上;基本上我想要做的是让输入层从触摸屏获取输入,然后触发回调以通知任何听取该输入的元素。现在tr1 / boost似乎通过使用函数和 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 仍在使用中。我想知道我是否遗漏了一些东西,或者我的睡眠不足只是让我走错了路?谢谢你们!
答案 0 :(得分:5)
您应该使用占位符
callback = tr1::bind(&MenuScene::handleInputCallback, this,
tr1::placeholders::_1);
然后调用
if (m_callback)
{
m_callback(MenuActions::backgroundTouchDown);
}
您的函数handleInputCallback
可以有默认参数,默认为MenuActions::neutral