热来处理c ++ 11 lambda,同时捕获此指针并调用约定

Mil*_*hen 1 c++ lambda c++11

使用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函数中调用成员函数,有人可以告诉我吗?

谢谢,迈尔斯

zch*_*zch 5

只有不捕获任何内容的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)