我可以在WinMain中将主窗口程序作为lambda吗?

rsk*_*k82 6 c++ lambda winapi c++11

我有一个简单的窗口应用程序,声明了主窗口回调过程:

WNDCLASSEXW wcx;
/* ... */
wcx.lpfnWndProc = MainWndProc;
Run Code Online (Sandbox Code Playgroud)

而之后WinMain,我宣布LRESULT CALLBACK MainWndProc(HWND mainWindow, UINT msg, WPARAM wparam, LPARAM lparam) { /* ... */},所有好的工作,但我不知道是否有可能有这个MainWndProc作为一个lambda 里面的WinMain?

Fle*_*exo 7

你可以使用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
}
Run Code Online (Sandbox Code Playgroud)

问题实际上是你可以在lambda中作为没有捕获的回调有多少.您仍然可以使用"全局变量",就像使用常规函数作为回调一样.