我有这个代码:
#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(使用前将#替换为@)