c++11学习笔记(2)- std::function

std::function 是一个 函数包装模板 ,用来存储、转移、调用目标函数,包括普通函数、类的成员函数、lambda表达式、仿函数等。如果std::function未包裹任何可调用的元素,则会抛出std::bad_function_call 异常。

下面是一个关于std::function的使用的一个简单的示例
首先我们定义几个函数:

// 普通函数
void printFunc(int number)
{
	std::cout << __FUNCTION__ << " " << number << std::endl;
}

class Foo
{
public:
	// 非静态成员函数
	void addFunc(int number) {
		std::cout << __FUNCTION__ << " " << number + m_Number << std::endl;
	}

	// 静态成员函数
	static void staticFunc(int number) {
		std::cout << __FUNCTION__ << " " << number << std::endl;
	}
	int m_Number = 10;
};

// 仿函数
class ObjectFunc
{
public:
	void operator() (int number){
		std::cout << __FUNCTION__ << " " << number << std::endl;
	}
};

下面是关于函数的调用:

// 普通函数
std::function<void(int)> f1 = printFunc;
f1(10);

// lambda表达式
std::function<void(int)> f2 = [](int n) {
	std::cout << __FUNCTION__ << " " << n << std::endl;
};
f2(10);

Foo foo;
// 类的非静态成员函数(对象调用)
std::function<void(int)> f3_1 = std::bind(&Foo::addFunc, foo, std::placeholders::_1);
std::function<void()> f3_2 = std::bind(&Foo::addFunc, foo, 20);
f3_1(10);
f3_2();

// 类的非静态成员函数(指针调用)
std::function<void(int)> f4_1 = std::bind(&Foo::addFunc, foo, std::placeholders::_1);
std::function<void()> f4_2 = std::bind(&Foo::addFunc, foo, 20);
f4_1(10);
f4_2();

// 带固定参数
std::function<void()> f5 = std::bind(printFunc, 100);
f5();

// 类的静态函数
std::function<void(int)> f6 = &Foo::staticFunc;
f6(100);

// 仿函数
std::function<void(int)> f7 = ObjectFunc();
f7(100);

运行结果如下:
printFunc 10
main::<lambda_d2573905243ae936524d018319db3380>::operator () 10
Foo::addFunc 20
Foo::addFunc 30
Foo::addFunc 20
Foo::addFunc 30
printFunc 100
Foo::staticFunc 100
ObjectFunc::operator () 100


作者:douzhq
个人主页:https://www.douzhq.cn
文章同步页:https://douzhq.cn/c11_stdfunction/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值