gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:05 24 4
gpt4 key购买 nike

在 VC2012 中,当使用没有捕获列表的 lambda 函数时,编译器将自动处理调用约定。例如

EnumWindows([](HWND, LPARAM){ return TRUE; }, 0); // compile with no problem

但是当我将 this 指针指向捕获列表时,它无法编译。例如

EnumWindows([this](HWND, LPARAM){ return my_class_member_function(); }, 0); // error

有人可以告诉我是否有办法在 lambda 函数中调用成员函数吗?

谢谢,迈尔斯

最佳答案

只有不捕获任何内容的 lambda 可以转换为函数指针,并且此 API 仅接受指针。

你可以做的是保持 lambda 无状态,并通过 lparam 传输 this:

EnumWindows(
[](HWND, LPARAM lparam){
return reinterpret_cast<Your_Class*>(lparam)->my_class_member_function();
},
reinterpret_cast<LPARAM>(this));

关于c++ - 热处理 c++11 lambda,同时捕获此指针并指定调用约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19475557/

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