如何使用tr1函数并使用更改参数绑定函数?

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.我想知道我是否遗漏了一些东西,或者我的睡眠不足只是让我走错了路?多谢你们!

For*_*veR 5

你应该使用占位符

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