boost::bind boost::function

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace boost;   
using namespace std;  

class point   
{
public:
	point(int a=0,int b=0):x(a),y(b)
	{}   
	void print()
	{   
		cout << "(" << x << "," << y << ")\n";   
	}   
	void setX(int a)
	{   
		x = a;
	}   
	void setXY(int _x,int _y)
	{   
		x = _x;
		y = _y;
	}   

private:
	int x,y;   
};   
  
int main(int argc, char ** argv)   
{   
	point p1,p2;
	p1.print( );
	p2.print( );
	
	bind(&point::setXY, &p1, _1, _2)(1, 2);
	bind(&point::setXY, p2, _1, _2)(3, 4);;
	p1.print( );
	p2.print( );
	
	function<void(int, int)> f1 = bind(&point::setXY, &p1, _1, _2);
	function<void(int, int)> f2 = bind(&point::setXY, p2, _1, _2);
	f1(5, 6);
	f2(7, 8);
	p1.print( );
	p2.print( );
	
	function<void(point*, int, int)> f3 = &point::setXY;
	function<void(point, int, int)> f4 = &point::setXY;
	f3(&p1, 10, 20);
	f4(p2, 30, 40);
	p1.print( );
	p2.print( );
	return 0;
}  

 结果:

(0,0)
(0,0)
(1,2)
(0,0)
(5,6)
(0,0)
(10,20)
(0,0)

 

posted @ 2014-05-16 17:43  liuzhijiang123  阅读(125)  评论(0编辑  收藏  举报