首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用__stdcall对C++ lambda进行限定?

如何使用__stdcall对C++ lambda进行限定?
EN

Stack Overflow用户
提问于 2013-07-18 03:46:41
回答 1查看 5.7K关注 0票数 8

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

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

代码语言:javascript
运行
复制
 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在函数作用域中):

代码语言:javascript
运行
复制
        auto EnumWindowsProc = 
            [&](HWND hwnd, LPARAM lParam) mutable -> bool
        {
            return true;
        };
        EnumWindows(EnumWindowsProc, NULL);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 03:52:30

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

在工作文件(第0.9节)中投票通过兰巴斯和增加可变羔羊(1.0版)后,标准化委员会对措辞进行了修订,产生了第1.1版。这种情况发生得太晚了,我们无法在VC10中实现,但我们已经在VC11中实现了它。的lambdasv1.1措辞澄清了在诸如引用静态成员或嵌套lambdas这样的角落情况下应该发生什么。这修复了一些由复杂的lambdas触发的错误。此外,无状态lambda现在可以转换为VC11中的函数指针。这不是N 2927的措辞,但我认为它是lambdas v1.1的一部分。它是 5.1.2 expr.prim.lambda/6:“没有lambda捕获的lambda表达式的闭包类型具有一个公共的、非虚的、非显式的const函数转换函数的指针类型,其参数和返回类型与闭包类型的函数调用操作符相同。这个转换函数返回的值应该是一个函数的地址,该函数在调用时具有调用闭包类型的函数调用操作符的相同效果。”(比这更好,因为我们已经将无状态lambda转换为具有任意调用约定的函数指针。在处理需要__stdcall函数指针等API时,这一点很重要。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17714175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档