cocos2dx 3.0 函数指针 lambda 运用

前来说说  lambda 是什么意思 c++11 出来的新功能


1    2     3               4               5
[=] () mutable  throw() ->   int
{
   6
   ...
   return 0;
}

1  lambda 声明 

     [=] 数据拷贝 
     [&total ,factor]   fatal 传入引用,factor 不同赋值 
     [&,factor]  只要不是factor 变量,其他的传入的都是引用传入
     [=,&total]  只要不是total变量,其他的默认普通赋值, 只有total是引用 用
2  参数声明列表
3  可变的规范
4  异常规范
5  lambda返回类型条款
6  函数体

例子

 int m = 0, n = 0;

 [&, n] (int a) mutable { m = ++n + a; }(0);

std::cout << m << std::endl << n << std::endl;

输出

   1

   0

int x = 4;
int y = 5;
int z = [=]{return x+y; }();
std::cout << x << std::endl << y << std::endl<< z << std::endl;

输出
4
5
9

auto f = [] (int x, int y) { return x + y; };
std::cout << f(21, 12) << std::endl;
输出
33


int m = [](int x)
{
return [](int y)
{
   return y * 2;
}(x) + 3;
}(5);
std::cout << m << std::endl;
输出
13

应该 知道是什么意思了吧 也差不多了               

#define CL(__className__) [](){ return __className__::create();}

int m = [](int x)
{
return [](int y)
{
   return y * 2;
}(x) + 3;
}(5);

和这个有什么区别  只不过是写了一个混函数 还是 匿名函数 返回 当前参数的个create方法 也就是返回当前参数的实例

static std::function<Layer*()> createFunctions[] = { //首先是个数组   Layer *函数 数组

    CL(ActionManual),

};

function<Layer*()> 也是c++ 11 中新增加的 功能 具体用法 我也不太熟悉

 我经常用 

  dynamic_cast<CCA*>(Object)    他的是  <Layer*()>    <CCA*>(Object)    也点不一样吧  闷也门上了

强制类型 转换 还不许是和这个 类型 有关系 的那种 比如说 父子 根 子 兄弟 都可以 



Layer *pLayer=createFunctions[0]; //这就获取了  ActionManual  layer  的对象  错误

首先  std::function<Layer*()> 这个是个函数 


Layer *pLayer=(createFunctions[sceneIdx])();//这样是的对的



应该就这些了 













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值