我是靠谱客的博主 生动麦片,最近开发中收集的这篇文章主要介绍C++11 std::function一、简介二、std::function包装函数三、std::function包装函数指针四、std::function包装模板函数五、std::function包装函数对象六、std::function包装lamda表达式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、简介
  • 二、std::function包装函数
  • 三、std::function包装函数指针
  • 四、std::function包装模板函数
  • 五、std::function包装函数对象
  • 六、std::function包装lamda表达式

一、简介

std::function是一个函数包装器,该函数包装器模板能包装任何类型的可调用实体,如普通函数,函数对象,lamda表达式等;

包装器可拷贝,移动等,并且包装器类型仅仅依赖于调用特征,而不依赖于可调用元素自身的类型。std::function是C++11的新特性,包含在头文件<functional>中:

#include <functional>

一个std::function类型对象实例可以包装下列这几种可调用实体:函数、函数指针、成员函数、静态函数、lamda表达式和函数对象。std::function对象实例可被拷贝和移动,并且可以使用指定的调用特征来直接调用目标元素。当std::function对象实例未包含任何实际可调用实体时,调用该std::function对象实例将抛出std::bad_function_call异常。


二、std::function包装函数

#include <functional>
using namespace std;

int fun1(int a) {	//函数
	return a;
}

function<int(int)> callback;

int main(int argc, char *argv[]){
	callback = fun1;		//std::function对象包装函数
	callback(10);			//std::function对象实例调用包装的实体

	return 0;
}


三、std::function包装函数指针

#include <functional>
using namespace std;

int (*func_ptr)(int);	//函数指针

int fun1(int a) {	//函数
	return a;
}

function<int(int)> callback;

int main(int argc, char *argv[]){
	fun_ptr = fun1;			//函数指针fun_ptr指向fun1函数
	callback = fun_ptr;		//std::function对象包装函数指针
	callback(10);			//std::function对象实例调用包装的实体

	return 0;
}

四、std::function包装模板函数

#include <functional>
using namespace std;


template<typename T>
T fun1(T a) {
	return a;
}

function<int(int)> callback;

int main(int argc, char *argv[]){
	callback = fun1<int>;		//std::function包装模板函数
	callback(10);				//std::function对象实例调用包装的实体

	return 0;
}

五、std::function包装函数对象

#include <functional>
using namespace std;

struct add {
	int operator()(int x) {
		return x+9;
	}
};

function<int(int)> callback;

int main(int argc, char *argv[]){
	callback = add();			//std::function包装对象函数
	callback(10);				//std::function对象实例调用包装的实体

	return 0;
}

六、std::function包装lamda表达式

#include <functional>
using namespace std;

function<int(int)> callback;

int main(int argc, char *argv[]){
	auto fun1 = [](int a){return a*2;};		//lamda表达式
	callback = fun1;			//std::function包装lamda表达式
	callback(10);				//std::function对象实例调用包装的实体

	return 0;
}

最后

以上就是生动麦片为你收集整理的C++11 std::function一、简介二、std::function包装函数三、std::function包装函数指针四、std::function包装模板函数五、std::function包装函数对象六、std::function包装lamda表达式的全部内容,希望文章能够帮你解决C++11 std::function一、简介二、std::function包装函数三、std::function包装函数指针四、std::function包装模板函数五、std::function包装函数对象六、std::function包装lamda表达式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部