level 1
士止刀口
楼主
以下是一个非类成员函数指针(即一般的函数) 或者静态类成员指针
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 的函数。
2013年12月09日 04点12分
1
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 的函数。