5

私はこのコードを持っています:

#include <iostream>
#include <functional>
#include <vector>

void fun()
{
    std::cout<<"fun";
}

void gun(int)
{
    std::cout<<"gun";
}

int main()
{
    std::vector<std::function<void(int)>> vec;

    vec.push_back(std::bind(fun));
    vec.push_back(gun);

    vec[0](1);
    vec[1](2);
}

関数をバインドするときにどのようstd::bindに戻ることができるか説明してください。std::function<void(int)>void()

ファンクターvoid()を使用して関数を呼び出すにはどうすればよいですか?void(int)

4

2 に答える 2

9

のみのテンプレート引数として渡される署名は、バインドされるfunctionプレースホルダー ( ) の数と、その型を決定します。_1

実際の関数の呼び出しでは、バインドされた関数で実際に必要な数の引数のみが使用されます。実際には、余分なパラメーターは無視されます。

別の、より啓発的な (?) 例として、これを反対側から見てみましょう:

#include <iostream>
#include <functional>

void gun(int i)
{
    std::cout<<"gun("<<i<<")";
}

int main()
{
    using namespace std::placeholders;
    std::bind(gun, _5)("ignore", 3, "and", 4, 43);
}

版画

gun(43)
于 2013-04-23T06:47:03.327 に答える