前来说说 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])();//这样是的对的
应该就这些了