繁体   English   中英

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

[英]how to use __stdcall to qualify 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);

我刚刚注意到你有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时非常重要。

另请注意,如果没有第二个粗体引用中提到的捕获规范,则会发生此转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM