1第一个function案例
#include<iostream>
#include <boost/function.hpp>
using namespace std;
using namespace boost;
int main(int argc,char *argv[])
{
//其中atoi:表示的是将字符串转换成为数字,即:char * to int
//int表示的是函数的返回值,char *表示函数的参数类型
boost::function<int(char *)> fun = atoi;
//下面的运行结果是25
cout << fun("12") + fun("13") << endl;
//指向strlen函数。可以直接=,是因为strlen的参数类型也是char *类型的
fun = strlen;
//说明不不加'\0',下面的运行结果是5
cout << fun("adfaa") << endl;
cin.get();
}
运行结果:

2.function结合bind,案例如下:
#include<iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
using namespace boost;
int main(int argc, char *argv[])
{
boost::function<int(char *)> fun = atoi;
//下面的_1是一个占位符,表示fun要传入的参数
fun = boost::bind(strcmp, "034", _1);
//如果上面的"034"改成"234",运行结果是1
//此种情况运行的结果是:-1
cout << fun("123") << endl;
//下面的运行结果是0
cout << fun("034") << endl;
cin.get();
}
运行结果是:

3.function案例3
#include<iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
using namespace boost;
//通过下面的类管理worker类
class manager
{
public:
void allstart()
{
for (int i = 0; i < 10; i++)
{
//判断是否为空
if (workid)
{
//这时候直接调用i
workid(i);
}
}
}
//绑定调用,类似劫持,回调
void setcallback(boost::function<void(int)> newid)
{
workid = newid;
}
public:
//通过下面的指针绑定void run(int toid)这个函数
boost::function<void(int)> workid;
};
class worker
{
public:
void run(int toid)
{
id = toid;
cout << id << "工作" << endl;
}
public:
int id;
};
int main(int argc, char *argv[])
{
manager m;
worker w;
//类的成员函数需要对象来调用,绑定一个默认的对象
//在调用之前要进行一个绑定,绑定到对象之上
m.setcallback(boost::bind(&worker::run, &w, _1));
m.allstart();
cin.get();
return 0;
}
运行结果:
