士止刀口 士止刀口
关注数: 0 粉丝数: 2 发帖数: 56 关注贴吧数: 0
用过gcc的进来下,本人用vc2013,关于lambda的问题求确认 以下是一个非类成员函数指针(即一般的函数) 或者静态类成员指针 typedef void (*void_fp_void)();//定义了这么一个类型 void_fp_void func1 = [](){ /*..........*/ };//这种情况下没有用到函数外的变量可以成功 int i = 0; void_fp_void func2 = [&](){ ++i; };//问题出现了,不能赋值,因为类型不同 /////////////然后我又做了下面的测试/////////////////////// int i1 = 0; int i2 = 0; auto func1 = [=]{ ++i1; }//只拷贝了i1 一个int auto func2 = [=]{ ++i1; ++i2; }//拷贝了i1和i2 两个int cout << sizeof(func1);//输出 4 即一个int 的大小 cout << sizeof(func2);//输出 8 即2个 int 的大小 这么看来我不免会想,所谓的闭包只不过是一个 重载 了 operator() 函数操作符的类型,一个语法糖而已, 我没用过gcc 不知道这只是 vc2013这么搞还是lambda就是个语法糖 我本来是想用 lambda来解决 WNDPROC不能是 非静态类成员函数的问题, 结果碰壁了,如果 lambda 只是这样 那么这个功能基本上可以用重载operator()来模拟 运行时也没有生成新的函数。只不过是生成了一个 重载了operator()的类对象, 该对象保存了相关的函数外变量的指针或者直接拷贝。 ///////////////////////////////////////////////////////////////////////////////// 如果用gcc的请试以下,我没有找到相关lambda的实现的资料 还是我哪里使用错了 可以将 用了 函数外 变量的 lambda 赋值给 非类成员函数(即一般的函数) 或 静态类成员函数 还是 vc2013偷懒 写了个 模板 充当 lambda , gcc 可以, 如果lambda只是语法糖,那么 如何为 每一个窗口 提供一个拥有自己独立地址的 WNDPROC 的函数。
1 下一页