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

时间:2013-03-11 06:43:02

标签: c++ boost callback boost-bind tr1

我目前正从C#转到C ++并重写一些游戏引擎代码,我想我在tr1的墙上;基本上我想要做的是让输入层从触摸屏获取输入,然后触发回调以通知任何听取该输入的元素。现在tr1 / boost似乎通过使用函数 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 仍在使用中。我想知道我是否遗漏了一些东西,或者我的睡眠不足只是让我走错了路?谢谢你们!

1 个答案:

答案 0 :(得分:5)

您应该使用占位符

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

然后调用

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

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