我如何使用tr1函数和绑定函数的变化参数

How do I use tr1 function and bind for functions with changing parameters?

本文关键字:函数 变化 参数 绑定 何使用 tr1      更新时间:2023-10-16

我目前正在从c#转向c++,并重写一些游戏引擎代码,我认为我在tr1的墙上;本质上我想做的是让一个输入层从触摸屏获取输入然后触发一个回调去通知任何监听那个输入的元素。现在tr1/boost似乎使这个超级容易通过使用函数绑定,但是触发回调是无效的()没有问题,但现在我试图发送参数通过这些回调调用时(例如枚举)。

这里的问题是,当我调用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仍然被使用。我在想,是我错过了什么,还是我睡眠不足让我走上了错误的道路?谢谢你们了!

你应该使用占位符

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

,然后调用

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

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