Tri*_*ant 5 c++ windows lambda visual-studio-2010 c++11
前言 - 我喜欢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
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?这是我的代码(EnumWindowsProc在函数范围内):
auto EnumWindowsProc =
[&](HWND hwnd, LPARAM lParam) mutable -> bool
{
return true;
};
EnumWindows(EnumWindowsProc, NULL);
Run Code Online (Sandbox Code Playgroud)
Jes*_*ood 10
我刚注意到你有visual studio 2010标签.无状态lambda在VC11中实现.参考:
在将lambdas投入工作文件(v0.9)并添加可变lambdas(v1.0)之后,标准化委员会对措辞进行了彻底修改,产生了lambdas v1.1. 这对于我们在VC10中实施来说太晚了,但我们已经在VC11中实现了它. lambdas v1.1措辞阐明了在引用静态成员或嵌套lambda等极端情况下应该发生什么.这修复了由复杂lambda引发的一堆错误.此外,无状态lambda现在可以转换为VC11中的函数指针.这不是N2927的措辞,但无论如何我将它视为lambdas v1.1的一部分.这是FDIS 5.1.2 [expr.prim.lambda]/6:"没有lambda-capture的lambda表达式的闭包类型有一个公共的非虚拟非显式const转换函数,指向具有相同参数的函数,返回类型作为闭包类型的函数调用操作符.此转换函数返回的值应该是一个函数的地址,当调用它时,它与调用闭包类型的函数调用操作符具有相同的效果.(它甚至比那更好,因为我们已经将无状态lambda转换为具有任意调用约定的函数指针.这在处理期望__stdcall函数指针的API时非常重要.)
另请注意,如果没有第二个粗体引用中提到的捕获规范,则会发生此转换.