gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:42:48 25 4
gpt4 key购买 nike

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

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 Aircraft:public SceneNode
{
public:
void fire()
};

我读过一些关于 std::bind 的文章,但老实说我还没有看到这样的文章。这要复杂得多。

让我整理一下我的问题:

1-根据我的阅读,这个 std::bind 有三个参数!成员函数、隐式类名和_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 , 它被忽略了。

关于c++ - std::bind 如何增加传递给函数的参数数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38808989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com