lambda

c – 在模板化类和非模板化类中的lambda属性中捕获它

编译器是g4.9.2,使用标志-std=c1y.标志-std=c11也会发生同样的事情.解决方法这确实是GCC中的一个错误,已经是beingtracked了.它似乎影响4.8和4.9.正如评论中指出的那样,这个特殊的例子适用于4.7和5.0.你可以看到自己here并玩不同版本的gcc.但是,这个没有外部依赖的代码缩减版仍然会崩溃5.0:我建议您在使用代码之前等待我引用的错误,或者切换到另一个编译器;).

c – lambda捕获变量的规则

例如:当您在MSVC2010中编译并运行它时,您会收到以下错误:错误C3480:’Example::num’:lambda捕获变量必须来自封闭的函数作用域但是,使用g4.6.2,您将得到:12345根据标准草案,哪个编译器是正确的?

c – 将存储在std :: function中的带有子句的lambda转换为原始函数指针

由于我的lastrecentquestion令人遗憾的措辞并导致解决另一个问题然后我的,我将在这里尝试以明确的方式制定我的实际问题.在我们开始之前,作为旁注,我正在将Javascript引擎V8集成到我的C应用程序中.这就是示例中所有类型的来源.这也是我最终需要一个原始函数指针这一事实的原因.但我在下面详细说明.从类内部我需要将一个带有capture子句[=]的lambda表达式作为std::fu

如何在c 0x中缓存lambda?

在C#中使用它们后,我正在尝试使用lambda中的lambda.我目前有一个boost元组(这是真正简化的版本).然后我将全局命名空间中的函数加载到我的FooTuple中.理想情况下,我想用lambda替换它.我无法弄清楚lambda元组的函数签名是什么.它显然不是函数指针,但我无法弄清楚lambda的签名应该是什么.lambda的资源现在都非常薄.我意识到C0x目前处于不稳定状态,但我很好奇如何

c – 所有lambda声明都应该是const static吗?

不,lambdas不是文字.它们可以从封闭范围捕获状态,并且可以是非常量的.考虑:如果你在那里添加静态,变量lambda将由使用f的所有代码共享,并且它将仅在第一次调用时初始化,从第一次调用f中捕获a的值.如果没有静态,每次调用f都会使用它自己的第一个参数.虽然这个例子非常人为,但我希望有助于明确这一点.

c – 为什么从lambda返回const引用导致临时?

解决方法lambda的返回类型不是引用.这是你所有问题的原因.您的lambda返回名称的副本.你将这个lambda存储在一个std::function中,返回一个conststd::string&,这意味着你将返回一个对该副本的引用,一旦std::function的调用运算符返回,它将被销毁!1当然,修复是更改lambda的返回类型:1:为了扩展这一点,您可以将std::function的实现想象成这样的东西:

c – 检测函数对象(仿函数)和lambda特征

如何检测nullary和unary函数指针,std::function对象和functor的返回类型和参数类型?Boost的function_traits和functionaltraits并没有让我开箱即用,但我愿意补充或更换它们.我可以这样做:但是我应该如何专注于functor/lambdas呢?解决方法在一般情况下,对于仿函数,即使用operator()的类类型,这是不可能的.这也包括lambda对象.考虑一下operator()重载的情况:result_type应该是什么?

C lambda表达式 – 编译器如何解释它们?

我刚刚开始学习C11中的新功能.我正在阅读CPrimer中的lambdas,并正在尝试它们.我尝试了以下代码:这段代码编译得很好.所以我猜没有任何捕获的lambdas只是由编译器生成为普通函数,我们可以使用它们的普通函数指针.现在我更改了代码以使用捕获:但这无法编译.使用g时出现以下编译错误:从错误我可以理解,它不是一个生成的普通函数,它可能是一个带有重载调用操作符的类.或者是别的什么?

c – 使用lambda函数定义非常小的辅助函数是否很好?

解决方法这种本地范围的函数的优点是它们不会用“帮助器”定义污染周围的代码–所有行为都可以限制在单个范围内.由于它们可以访问周围函数的词法范围,因此它们可用于在不传递许多参数的情况下对行为进行因子分析.您还可以使用它们创建小型DSL来抽象函数的机械细节,以便以后更改它们.您可以为重复值定义常量;为什么不对代码做同样的事情?

c – Lambda作为类成员

是否有可能接受两种不同类型的lambda函数作为类成员而不知道他们的模板参数提前?这样的事情是可能的:解决方法如果您只想在不同时间构造two_functors,但是稍后按顺序执行它们,您可以只使用捕获的数据.