|
|
1
14
您永远无法知道lambda函数的类型,因为在逻辑上,编译器会生成一个(本地)类,函数调用运算符重载,并且该(本地)类的数据成员表示词法闭包。这是lambda函数在逻辑上发生的情况,例如:
编译器逻辑上这样做:
由于编译器生成一个(本地)类,它会生成一个名称,因此您永远不能显式地写入该类型,因此您只能从模板函数参数的类型扣除或使用auto/decltype推断该类型。 此外,C++0x闭包是静态分配的,因此无论如何都不能安全地返回原始C++0x闭包。 尽管有几种方法可以实现这一点,但第一种方法更灵活,支持捕捉词汇范围的lambda函数。使用std::function,如果您有一个lambda函数,它没有从外部范围捕获任何内容,那么您可以使用函数指针,但是这种转换更多的是用于处理遗留代码,而不是任何东西。 所以基本上你想要的是:
为什么我一直在逻辑地说,是因为这是如何推进:lambda类型的作品最初(即使C++ 03不允许本地类在模板函数参数中使用)和添加lambda函数的想法源自何处,但由于这是一个语言特征,现在编译器供应商可以在不同和M中实现它。更有效的方法是,当通过引用捕获所有环境时,编译器只需向调用堆栈传递一个指针,而不是以逻辑方式传递,同时仍然维护逻辑视图。 |
|
|
2
6
从 Wikipedia :
VC10编译此
印刷品 12 30 |
|
|
Setu · 如何将元素从std::map移动到std::vector 1 年前 |
|
Konvt · 标准库中异常构造函数参数类型问题 1 年前 |
|
|
bourne · 关于操作员超载的澄清 1 年前 |