std :: function和std :: bind行为

Mir*_*pas 5 c++ stl c++11

我有这个代码:

#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);
}
Run Code Online (Sandbox Code Playgroud)

你能解释一下绑定功能时如何std::bind返回?std::function<void(int)>void()

如何void()使用void(int)仿函数调用函数?

seh*_*ehe 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);
}
Run Code Online (Sandbox Code Playgroud)

打印

gun(43)
Run Code Online (Sandbox Code Playgroud)