std::function 和 std::bind 行为

2024-04-27

我有这个代码:

#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)函子?


作为模板参数传递的签名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);
}

Prints

gun(43)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::function 和 std::bind 行为 的相关文章

随机推荐