如何使用__stdcall来限定C ++ lambda?

前言 – 我喜欢C ++的lambda,如果可能的话我会在任何地方使用它。

现在我有一个lambda要求,我需要一个__stdcall lambda。 但是我收到以下错误消息:

error C2664: 'EnumWindows' : cannot convert parameter 1 from '`anonymous-namespace'::<lambda1>' to 'WNDENUMPROC' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

任何人都可以帮助我? 这里是我的代码( EnumWindowsProc是在函数范围内 ):

  auto EnumWindowsProc = [&](HWND hwnd, LPARAM lParam) mutable -> bool { return true; }; EnumWindows(EnumWindowsProc, NULL); 

Solutions Collecting From Web of "如何使用__stdcall来限定C ++ lambda?"

我只是注意到你有visual studio 2010标签。 在VC11中实现无状态lambda。 参考 :

在lambda被投票到工作文件(v0.9)和可变的lambda被添加(v1.0)之后,标准化委员会彻底改变了措词,产生了lambda 1.1版。 对于我们在VC10中实现这件事发生得太迟了,但是我们已经在VC11中实现了它。 lambda 1.1版的措辞阐明了在引用静态成员或嵌套lambdas的角落案例中应该发生什么。 这解决了由复杂的lambdas触发的一堆错误。 另外,无状态lambda现在可以转换成VC11中的函数指针。 这不是N2927的措辞,但是我把它作为lambda v1.1的一部分。 它是FDIS 5.1.2 [expr.prim.lambda] / 6: “不带lambda捕获的lambda表达式的闭包类型有一个公共的非虚拟非显式const转换函数指向具有相同参数的函数返回类型作为闭包类型的函数调用操作符 ,这个转换函数返回的值应该是被调用的函数的地址,具有和调用闭包类型的函数调用操作符相同的效果。 ( 它甚至比这更好,因为我们已经将无状态的lambda转换为具有任意调用约定的函数指针,当处理期望__stdcall函数指针等的API时,这是非常重要的。

此外,请注意,此转换发生在第二个加粗的引号中没有捕获规范时。