问题标签 [generic-lambda]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1097 浏览

c++ - 带有 auto 参数的 lambda 是否有 std::function 类型或类似类型?

当我将 lambda 分配给显式类型的变量时(例如,当它是递归时,以捕获函数本身),我使用std::function.

以这个愚蠢的“位计数”函数为例:

x如 C++14 泛型 lambda 中介绍的那样,当我们使用 auto 参数进行泛化时,情况如何?

显然,我不能放入auto类型function参数。

是否有可能定义一个足以涵盖上述确切情况的仿函数类,但仍使用 lambda 进行函数定义?

(不要过度概括,只接受一个自动参数并对返回值进行硬编码。)用例将适用于上述场景:通过引用捕获函数本身以进行递归调用。

0 投票
2 回答
2494 浏览

c++ - 带有 lambda 的 std::equal_range

假设我有一个字符串向量,我想找到所有以 开头的字符串,'a'所以我可以这样做:

这种方法容易出错,因为容易出错(例如我认为它应该c < s.front()在第二种方法中)并且有代码重复。

那么是否可以使用通用 lambda 而不是使用 2 种方法的结构来实现比较功能?

更一般的问题,为什么要比较的值必须作为参数传递给std::lower_boundstd::upper_bound什么std::equal_range时候它可以很容易地被 lambda 捕获或传递给比较结构,那么这个问题就根本不存在了?

std::equal_range如果不需要价值,它如何工作?

0 投票
1 回答
822 浏览

c++ - 头文件中的 C++14 通用 lambda

我有一组函子,如下所示:

将它们存储在头文件中是否正确?(有什么副作用吗?)

0 投票
1 回答
117 浏览

c++ - 泛型lambda,实参类型推导(auto)

考虑:

用法是:

这段代码因为 (X) 而编译失败,这当然是我可以理解的。我们不能将 const 引用绑定到右值引用。美好的。

有人可以解释一下lambda4'sp参数的实际类型是什么吗?在这里(Y),即使我将 const 引用参数传递给它,编译器也会编译它。

类型推导意义上的lambda2和类型有什么区别?lambda4

0 投票
1 回答
540 浏览

c++ - 从通用 lambda 中检测参数类型 - 使用 GCC 编译错误

我编写了一些代码,在给定通用 lambda 函数时检索非自动参数的类型。正如您在下面的代码中看到的那样,想法是使用通用 lambda 调用 connect 函数并为自动参数提供参数(在我的用例中始终位于前面)。所以在下面的代码中,我的目标是检测第二个参数的类型是浮点数。

该代码适用于 clang 3.8,但它不能使用 gcc 6.1.1 编译,所以我想知道这是否是 gcc 中的一个错误,或者这是否只是无效的 c++ 代码?我可以假设通用 lambda 是使用模板化的 operator() 函数实现的,还是特定于编译器的?

gcc 给出的错误是这样的:

删除constin findArgTypes 会得到相同的结果。

使用以下代码适用于两种编译器:

0 投票
2 回答
1354 浏览

c++ - 为什么允许泛型 lambdas 而不允许使用模板化方法的嵌套结构?

据我了解 - 通用 lambda 被转换为带有模板的局部范围结构的对象operator()。这使得通用 lambda 工具非常强大且易于使用。另一方面,当结构具有模板化成员时,可以创建嵌套到函数中的结构,例如:

或自行模板化:

编译器似乎在编译它时有问题:

我认为问题更多在于 c++ 标准而不是编译器错误。允许 lambda 具有模板化成员而不是本地结构的原因是什么?

我找到了这个 qustion,但我认为答案有点过时(我认为即使对于 c++11 也是如此)。

0 投票
1 回答
1627 浏览

c# - c# 属性返回函数 - 从 lambda 中获取值

我有一个带有返回函数的属性的类。

如果我喜欢这样

如何将 a 的值分配给 lambda 中的目标变量,以便稍后在代码中重用它?

0 投票
2 回答
61 浏览

c++11 - 将可调用对象传递给构建某种多索引容器的对象

我正在尝试编写一个容器,该容器能够对对象进行分类并存储分类函数为真的指针。

我的问题是,它无法编译,并且由于我对std::functionor之类的可调用对象缺乏经验lambdas,因此我不确定如何修复它。

我想要这样一个容器,因为我需要经常获取一些“类别”——这使得缓存结果变得容易。特别是在本例中,如果Dogs 更改了它们的sound,则可以简单地重新创建类别(因为可调用对象仍然存在)。

更重要的是,我对提供良好性能的解决方案感兴趣。正如我所读到的,std::functions 不太可能是inlined。有没有办法提供inlined 性能?

编译器说:

这是我的代码:

0 投票
1 回答
360 浏览

c++ - 非捕获通用 lambda 是否应该衰减为函数指针?

考虑以下代码:

它适用于GCCclang
让我们考虑以下稍作修改的版本:

在这种情况下,clang 仍然接受它,而 GCC拒绝它

是否有任何理由应该拒绝此代码或者它是编译器的错误?


我将提出一个问题,但我想知道是否存在任何可以由其中一个而不是由另一个执行的提案。

0 投票
2 回答
1093 浏览

c++ - 如何从泛型 lambda 中的可变参数包中获取类型?

我正在尝试编写一个函数,该函数将返回带有可变参数的通用 lambda,其中 lambda 会检查其中一个参数是否等于特定值。这是(大致)我正在尝试做的事情:

我不确定在std::tuple</* ??? */>模板参数中放什么。我已经尝试过decltype(args), decltype(args...), auto,auto...和其他一些东西,但我不断收到编译器错误。这甚至可能吗?

非通用等价物将类似于:

这工作正常,但返回的 lambda 不是通用的 - 它不适用于任何任意参数包。