Boost库之function

      Boost.Function库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个函数指针能够在能以地方被调用或者作为一个回调函数。boost.function能够代替函数指针并提供更大的灵活性。

Boost.Function其语法如下:boost::function<float(intx, int y)>f

如果Function未赋予一个函数或者不合法的函数而被调用,则会抛出一个boost::bad_function_call异常。

#include "stdafx.h"
#include <iostream>
#include <boost/function.hpp>
#include<boost/bind.hpp>
using namespace std;

//print
int print(int a) 
{ 
	cout << a <<endl; 
	return a; 
} 

class X{
public:
	X(){};
	int print(int a) 
	{ 
		cout << a <<endl; 
		return a; 
	} 
};

typedef boost::function<int(int a)> FuncPrint;

int main(int argc, char* argv[]) 
{ 
	//外部函数
	boost::function<int(int)>f = print;
	f(5);

	//类成员函数,通过bind绑定
	X x;
	FuncPrint f2 = bind(&X::print,&x,_1);
	f2(10);
	//类成员函数,通过bind绑定,直接调用函数
	bind(&X::print,&x,_1)(15);

	//函数赋值不合法时,抛出一个boost::bad_function_call异常
	try
	{
		boost::function<void(char *)> f3;
		f3("");
	}
	catch (boost::bad_function_call &ex)
	{
		cout<<ex.what()<<endl;
	}

	return 0; 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byxdaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值