使用VC2012时,编译器将在没有捕获列表的情况下使用lambda函数时自动处理调用约定.例如
EnumWindows([](HWND, LPARAM){ return TRUE; }, 0); // compile with no problem
Run Code Online (Sandbox Code Playgroud)
但是当我将this指针放到捕获列表中时,它无法编译.例如
EnumWindows([this](HWND, LPARAM){ return my_class_member_function(); }, 0); // error
Run Code Online (Sandbox Code Playgroud)
如果有办法在lambda函数中调用成员函数,有人可以告诉我吗?
谢谢,迈尔斯
只有不捕获任何内容的lambda才能转换为函数指针,而且这个API只接受指针.
你可以做的是保持lambda无状态,并this通过lparam以下方式转移:
EnumWindows(
[](HWND, LPARAM lparam){
return reinterpret_cast<Your_Class*>(lparam)->my_class_member_function();
},
reinterpret_cast<LPARAM>(this));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |