1

我目前正在从 C# 转到 C++ 并重写一些游戏引擎代码,我想我在 tr1 的墙上;本质上,我想要做的是让输入层从触摸屏获取输入,然后触发回调以通知任何侦听该输入的元素。现在 tr1/boost 似乎通过使用functionbind使这变得超级简单,但是触发 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 。我想知道我是否错过了什么,或者我睡眠不足只是让我走错了路?多谢你们!

4

1 回答 1

5

你应该使用占位符

callback = tr1::bind(&MenuScene::handleInputCallback, this,
tr1::placeholders::_1);

然后像这样打电话

if (m_callback)
{
    m_callback(MenuActions::backgroundTouchDown);
}

你的函数handleInputCallback可以有默认参数,默认为MenuActions::neutral

于 2013-03-11T06:51:09.230 回答