我是靠谱客的博主 生动麦片,最近开发中收集的这篇文章主要介绍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表达式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复