3.Boost之function

来源:互联网 发布:游戏鼠标 知乎 编辑:程序博客网 时间:2024/06/06 02:45


1第一个function案例

#include<iostream>

#include<boost/function.hpp>

 

usingnamespacestd;

usingnamespaceboost;

 

intmain(intargc,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>

 

usingnamespacestd;

usingnamespaceboost;

 

intmain(intargc,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>

 

usingnamespacestd;

usingnamespaceboost;

 

//通过下面的类管理worker

classmanager

{

public:

   voidallstart()

   {

       for (inti = 0;i < 10;i++)

       {

           //判断是否为空

           if (workid)

           {

               //这时候直接调用i

               workid(i);

           }

       }

   }

   //绑定调用,类似劫持,回调

   voidsetcallback(boost::function<void(int)>newid)

   {

       workid =newid;

   }

public:

   //通过下面的指针绑定void run(int toid)这个函数

   boost::function<void(int)>workid;

};

 

classworker

{

public:

   voidrun(inttoid)

   {

       id =toid;

       cout <<id <<"工作" << endl;

   }

public:

   intid;

};

 

intmain(intargc,char *argv[])

{

   managerm;

   workerw;

   //类的成员函数需要对象来调用,绑定一个默认的对象

   //在调用之前要进行一个绑定,绑定到对象之上

   m.setcallback(boost::bind(&worker::run, &w,_1));

 

   m.allstart();

 

   cin.get();

   return 0;

}

运行结果:

 

 

 

 

 

 

 

 

 

0 0