私は本を読んでいて、コードの下にあります:std :: bindが関数に渡される引数の数を増やす方法は?
mActionBinding[Fire].action = derivedAction<Aircraft>(
std::bind(&Aircraft::fire, _1));
派生アクションに送られる引数は、2た引数後に送信されます。
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);
};
}
火災の宣言は、航空機のクラスにあるこのです:私はSTD ::バインドに関するいくつかの記事を読んだ
class Aircraft:public SceneNode
{
public:
void fire()
};
、正直なところ、私はthis.thisようなものがある見ていませんはるかに複雑です。
私の質問をソートしてみましょう:
私の読書に1をベースに、このSTD ::バインドは3つの引数を持っています!メンバー関数、暗黙のクラス名、および_1。それは本当ですか?これは、static_cast<gameObject &>(node)
の代わりにderivedActionで呼び出すと、「this」が送られることを意味しますか?
2-fireには引数がまったくありません(暗黙的なものを除いて)、なぜ_1はエラーが発生しませんか?どのように "dt"が送信されるのでしょうか?
私はちょっと混乱しています、参考文献には簡単な使用例があり、他の情報はstd::bind
です。
@AmiTavoryあなたのコメントがありませんでした。あなたはどういう意味ですか? – shayan
'bind'されたメンバ関数の最初の引数は、それが呼び出されるインスタンスです、別名' 'impicit this" _ –
@Revolver_Ocelot OK、それに対してパラメータはないが、jtは受け入れますか? – shayan