想当年,C++没有支持匿名函数的时候,如何使用“匿名函数”

方法有几种,这里一一列举

1:直接用结构体重载小括号

 1 struct UnnamedFunction
 2 {
 3     int operator()(int a, int b)
 4     {
 5         return a + b;
 6     }
 7 };
 8 
 9 int main()
10 {
11     printf("%d 
", UnnamedFunction()(5, 7));
12     return 0;
13 }

2:局部变量匿名结构体对象重载小括号

 1 int main()
 2 {
 3     struct 
 4     {
 5         int operator()(int a, int b)
 6         {
 7             return a + b;
 8         }
 9     } unnamed;
10 
11     printf("%d 
", unnamed(5, 7));
12     return 0;
13 }

3:结构体构造后成员返回

 1 struct UnnamedFunction
 2 {
 3     UnnamedFunction(int a, int b)
 4     {
 5         ret = a + b;
 6     }
 7     int ret;
 8 };
 9 
10 int main()
11 {
12     printf("%d 
", UnnamedFunction(5, 7).ret);
13     return 0;
14 }

通过方法三,其实可以引申出很多方法,

比如局部匿名结构体返值返回,

甚至模板结构体值返回,

而,其实,最常用的方法还是第二种方法,

因为第二种方法,比较符合我们对匿名函数的处理,

就算C++11 出了之后,匿名函数的使用依旧需要一个 auto 来引,

定义时调用的这种情况,确实模拟不出来,这是硬伤。

原文地址:https://www.cnblogs.com/suanguade/p/14102722.html