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

前端之家收集整理的这篇文章主要介绍了c – 我可以将主窗口程序作为WinMain中的lambda吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的窗口应用程序,声明了主窗口回调过程:
  1. WNDCLASSEXW wcx;
  2. /* ... */
  3. wcx.lpfnWndProc = MainWndProc;

并且在WinMain之后我声明了LRESULT CALLBACK MainWndProc(HWND mainWindow,UINT msg,WPARAM wparam,LPARAM lparam){/ * … * /}并且一切正常,但我想知道是否可以将此MainWndProc作为lambda在WinMain里面?

解决方法

你可以使用lambda,只要它没有捕获,然后它有一个隐式转换为函数指针:
  1. #include <iostream>
  2.  
  3. typedef void (*func)();
  4.  
  5. static func some_func;
  6.  
  7. int global;
  8.  
  9. int main() {
  10. some_func = [](){ std::cout << "Hello\n"; }; // Fine
  11. some_func();
  12. int local;
  13. some_func = [&](){ local = 1; }; // Illegal - No conversion
  14. some_func = [](){ global = 1; }; // Fine
  15. }

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

猜你在找的C&C++相关文章