我有一个简单的窗口应用程序,声明了主窗口回调过程:
- WNDCLASSEXW wcx;
- /* ... */
- wcx.lpfnWndProc = MainWndProc;
并且在WinMain之后我声明了LRESULT CALLBACK MainWndProc(HWND mainWindow,UINT msg,WPARAM wparam,LPARAM lparam){/ * … * /}并且一切正常,但我想知道是否可以将此MainWndProc作为lambda在WinMain里面?
解决方法
你可以使用lambda,只要它没有捕获,然后它有一个隐式转换为函数指针:
- #include <iostream>
- typedef void (*func)();
- static func some_func;
- int global;
- int main() {
- some_func = [](){ std::cout << "Hello\n"; }; // Fine
- some_func();
- int local;
- some_func = [&](){ local = 1; }; // Illegal - No conversion
- some_func = [](){ global = 1; }; // Fine
- }