首页 > 代码库 > std::function 使用_
std::function 使用_
1 #include <iostream> 2 #include <functional> 3 4 //函数指针写法 5 typedef int(*FuncPoint)(const int&); 6 7 8 std::function<int(const int &)> Function; 9 10 //普通函数 11 int FuncDemo(const int &value) 12 { 13 std::cout << "普通函数\t:" << value << "\n"; 14 return value; 15 } 16 17 //lamda函数 18 auto lmdFuc = [](const int &value) -> int 19 { 20 std::cout << "lamda函数\t:" << value << "\n"; 21 return value; 22 }; 23 24 //仿函数 25 class Functor 26 { 27 public: 28 int operator()(const int &value) 29 { 30 std::cout << "仿函数\t:" << value << "\n"; 31 return value; 32 } 33 }; 34 35 //类内静态函数和类成员函数 36 class Testclass 37 { 38 public: 39 int TestDemo(const int &value) 40 { 41 std::cout << "类内成员函数\t:" << value << "\n"; 42 return value; 43 } 44 45 static int TestStatic(const int &value) 46 { 47 std::cout << "类内静态成员函数\t:" << value << "\n"; 48 return value; 49 } 50 }; 51 52 53 int main() 54 { 55 //以往函数指针调用 56 FuncPoint Func(FuncDemo); 57 Func(10); 58 //普通函数 59 Function = FuncDemo; 60 Function(10); 61 62 //lamda函数 63 Function = lmdFuc; 64 Function(20); 65 66 //仿函数(函数对象) 67 Functor Fobj; 68 Function=Fobj; 69 Function(30); 70 71 //类内成员函数(需要bind()) 72 Testclass testclass; 73 Function=std::bind(&Testclass::TestDemo,testclass,std::placeholders::_1); 74 Function(40); 75 76 //类内静态成员函数 77 Function=Testclass::TestStatic; 78 Function(50); 79 80 81 return 0; 82 }
- 关于可调用实体转换为
std::function
对象需要遵守以下两条原则:- 转换后的
std::function
对象的参数能转换为可调用实体的参数; - 可调用实体的返回值能转换为
std::function
对象的返回值。
- 转换后的
std::function
对象最大的用处就是在实现函数回调,使用者需要注意,它不能被用来检查相等或者不相等,但是可以与NULL或者nullptr进行比较。
为什么加入std::function;
好用并实用的东西才会加入标准的。因为好用,实用,我们才在项目中使用它。std::function
实现了一套类型消除机制,可以统一处理不同的函数对象类型。以前我们使用函数指针来完成这些;现在我们可以使用更安全的std::function
来完成这些任务。
std::function 使用_
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。