Jed*_*edH 1 c++ boost tr1 callback boost-bind
我目前正从C#转到C++并重写一些游戏引擎代码,我想我在tr1的墙上; 基本上我想要做的是让输入层从触摸屏获取输入,然后触发回调以通知任何听取该输入的元素.现在tr1/boost似乎通过使用函数和绑定使这变得非常容易,但是激活void()的回调没有问题,但是现在我试图在调用时将参数发送到这些回调(例如枚举) .
这里的问题是,当我调用bind并插入参数时,它不会充当占位符,而是充当要传递的永久值.例如我的代码在这里:
包含类:
tr1::function<void (MenuActions action)> callback;
callback = tr1::bind(&MenuScene::handleInputCallback, this, MenuActions::neutral);
m_menuUILayer->registerCallback(callback);
Run Code Online (Sandbox Code Playgroud)
我的目的是创建一个函数并绑定它,然后registerCallback将此回调传递给成员类并存储引用.这部分有效,但现在在成员类中我可以调用回调但是总是发送默认参数...
会员类:
if (m_callback)
{
m_callback(MenuActions::backgroundTouchDown);
}
Run Code Online (Sandbox Code Playgroud)
因此,在这里,而不是将MenuActions :: backgroundTouchDown发送到回调中的主包含类,仍然使用默认的MenuActions :: neutral.我想知道我是否遗漏了一些东西,或者我的睡眠不足只是让我走错了路?多谢你们!
你应该使用占位符
callback = tr1::bind(&MenuScene::handleInputCallback, this,
tr1::placeholders::_1);
Run Code Online (Sandbox Code Playgroud)
然后打电话给
if (m_callback)
{
m_callback(MenuActions::backgroundTouchDown);
}
Run Code Online (Sandbox Code Playgroud)
并且你的函数handleInputCallback可以有默认参数,默认为MenuActions::neutral
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |