您的位置:首页 > 编程语言 > C语言/C++

C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较

2018-01-16 22:24 821 查看
  在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++一定能做到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: