C++11function包装器的使用

类模板std::function是一种通用、多态的函数包装。std::function的实例可以对任何可以调用的目标实体进行存储、
复制和调用操作。这些目标实体包括普通函数、Lambda表达式、函数指针、以及其他函数对象等。std::function对象是对
C++中现有的可调用实体的一种类型安全的包裹(像函数指针这类可调用实体,是类型不安全的)
    通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1,...Tn的n个参数
并且可返回一个可转换到R类型的值。std::function使用模板转换构造函数接收被包装的函数对象。
    准确来说,可调用对象有如下几种定义:
    (1)是一个函数指针;
    (2)是一个具有operator()成员函数的类对象
    (3)是一个可以被转换为函数指针的类对象
    (4)是一个类成员函数指针

#include<iostream>
#include<functional>
using namespace std;

void func(int x)
{
	cout << "func name:" << __FUNCTION__ << endl;
	cout << "x=" << x << endl;
}
class Foo
{
public:
	static int foo_func(int x)
	{
		cout << "func name:" << __FUNCTION__ << endl;
		cout << "x=" << x << endl;
		return x;
	}
};
class Bar
{
public:
	int operator()(int x)
	{
		cout << "func name:" << __FUNCTION__ << endl;
		cout << "x=" << x << endl;
		return x;
	}
};
int main()
{
	int x = 10;
	//绑定一个普通函数
	std::function<void(int)> fr1 = func;
	fr1(x);
	//绑定一个类的静态成员函数
	std::function<int(int)> fr2 = Foo::foo_func;
	cout << fr2(x) << endl;

	Bar bar;
	fr2 = bar;
	std::cout << fr2(x) << endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值