【发布时间】:2013-03-11 06:43:01
【问题描述】:
我目前正在从 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)>。 -
MenuScene::handleInputCallback的签名是什么? -
@juanchopanza 签名是 void handleInputCallback(MenuActions action)
-
在这种情况下,这个表达式
tr1::bind(&MenuScene::handleInputCallback, this, MenuActions::neutral);给你一个无参数的函数对象function<void(void)>。这意味着@ForEver 的答案看起来是正确的。
标签: c++ boost callback boost-bind tr1