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
,它会被忽略。
我正在看书,下面有代码:
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
,它会被忽略。