C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较
2018-01-16 22:24
821 查看
在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决。
如题,我总结下来有这么四种方式可以完成这项功能,下面来一一分析:
1、使用模板
View Code
说明:功能一模一样,一样以回调的方式显示结果。注意看lambda的回调函数类型哦!
优点:不用多说,整个代码简洁了不知道多少倍,优点无数。
总结:其实写这个博文就是为了学习C++的lambda表达式,在自己的项目中前3中方法都用了,始终感觉耦合度大,代码不简洁。见识过C#中lambda表达式的巨大优势,就知道C++一定能做到。
如题,我总结下来有这么四种方式可以完成这项功能,下面来一一分析:
1、使用模板
1 // CppTest.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <stdlib.h> 6 #include <math.h> 7 #include <iostream> 8 #include <functional> 9 10 class MathCallBack 11 { 12 int ops1,ops2; 13 int result; 14 15 public: 16 void Add(int a,int b,std::function<void (int)> func) 17 { 18 ops1 = abs(a); /* 实际上这个函数可能非常复杂,非常耗时,这样回调更突显作用*/ 19 ops2 = abs(b); 20 21 result = ops1+ops2; 22 func(result); 23 } 24 }; 25 26 int _tmain(int argc, _TCHAR* argv[]) 27 { 28 MathCallBack math; 29 30 31 math.Add(1,3,[](int result) -> void { 32 printf("result = %d\n",result); 33 }); 34 35 system("pause"); 36 37 return 0; 38 }
View Code
说明:功能一模一样,一样以回调的方式显示结果。注意看lambda的回调函数类型哦!
优点:不用多说,整个代码简洁了不知道多少倍,优点无数。
总结:其实写这个博文就是为了学习C++的lambda表达式,在自己的项目中前3中方法都用了,始终感觉耦合度大,代码不简洁。见识过C#中lambda表达式的巨大优势,就知道C++一定能做到。
相关文章推荐
- c/c++比较灵活的方法:回调函数和函数指针
- C++入门学习:函数模板及其使用,函数模板和普通函数的区别,函数模板的机制
- C++成员函数指针的使用方法
- C++中虚函数和纯虚函数的区别和常见使用方法
- [c++] 函数指针和函数指针数组的使用方法
- c++中回调函数和函数指针的使用
- c++中函数指针的使用方法
- c 函数指针的定义 和 C++回调函数的使用
- 使用继承或接口实现模板方法的方式与函数回调的感悟
- C++ MFC 其他函数获得主对话框指针并使用成员的方法
- 1.如何避免野指针2.获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点3.二维三维数组4.数组和函数的区别
- C++ 函数指针的定义方法及使用
- c 函数指针的定义 和 C++回调函数的使用
- C++模板技术之method_thunk, 使用场景: C++中类成员函数作为回调函数
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- 转:使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- C#与ActionScript3.0比较 -> 函数使用之区别
- [转]C/C++时间函数使用方法
- C++指针使用方法解惑
- C++指针使用方法解惑