std::bind 如何增加传递给函数的参数数量?

How std::bind increases number of arguments passed to a function?

我正在看书,下面有代码:

mActionBinding[Fire].action = derivedAction<Aircraft>(
std::bind(&Aircraft::fire, _1));

发送到派生操作的参数将在两个参数后发送。

template<typename GameObject, typename Function>derived action function 
std::function<void(SceneNode&, sf::Time)> derivedAction(Function fn) 
{
    return [=](SceneNode& node, sf::Time dt) expression 
    {
        assert(dynamic_cast<GameObject *>(&node) != nullptr);

        fn(static_cast<GameObject &>(node), dt);
    };
}

起火声明是飞机上的这个 class:

class Aircraft:public SceneNode
{
public:
    void fire()
};

我读过一些关于 std::bind 的文章,但老实说,我还没有看到 this.this 更复杂的文章。

让我整理一下我的问题:

1-根据我的阅读,这个 std::bind 有三个参数!成员函数,隐式 class 名称和 _1。是真的吗?这是否意味着,当我们在 derivedAction 中调用它时,而不是 static_cast<gameObject &>(node),"this" 将被发送给它?

2-fire 根本没有参数!(隐含的 this 除外),那么为什么 _1 没有给我们错误?以及如何将 "dt" 发送给它?

我有点困惑,参考提供了简单用法的示例,如有任何其他有关 std::bind 的信息,我们将不胜感激。

std::bind(&Aircraft::fire, _1)

1) 有两个参数传递给std::bind。第一个参数是 &Aircraft::fire,指向成员函数 Aircraft::fire 的指针。第二个参数是 std::placeholders::_1,由于某处存在 using namespace std::placeholders 而通过非限定查找找到。

fn(static_cast<GameObject &>(node), dt)

2) 参数 static_cast<GameObject &>(node) 替换了 _1 占位符。 Aircraft::fire 有一个参数,即隐式 this,因此 static_cast<GameObject &>(node) 作为隐式 this 参数提供给 Aircraft::fire。参数 dt 将替换 _2 占位符,但由于没有 _2,它会被忽略。