gpt4 book ai didi

c++ - 我可以在 WinMain 中将主窗口过程作为 lambda 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:55 28 4
gpt4 key购买 nike

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

WNDCLASSEXW wcx;
/* ... */
wcx.lpfnWndProc = MainWndProc;

WinMain 之后,我声明了 LRESULT CALLBACK MainWndProc(HWND mainWindow, UINT msg, WPARAM wparam, LPARAM lparam) {/* ... */> 和所有工作正常,但我想知道是否可以将此 MainWndProc 作为 WinMain inside 的 lambda?

最佳答案

您可以使用 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
}

真正的问题是,在没有捕获的情况下,作为回调,您可以在 lambda 中做多少有用的事情。您仍然可以求助于“全局变量”,就像使用常规函数作为回调一样。

关于c++ - 我可以在 WinMain 中将主窗口过程作为 lambda 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com