问题标签 [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 投票
1 回答
952 浏览

c++ - 为什么 lambda auto& 参数选择 const 重载?

我正在尝试实现一个包装任意类型和互斥锁的类。要访问包装的数据,需要传递一个函数对象作为locked方法的参数。包装类然后将包装的数据作为参数传递给这个函数对象。

我希望我的包装类与 const & non-const 一起使用,所以我尝试了以下

使用通用 lambda的第一次locked调用无法编译并出现以下错误

但是使用std::string&参数的第二次调用很好。

这是为什么 ?有没有办法让它在使用通用 lambda 时按预期工作?

0 投票
3 回答
1273 浏览

c++ - 是否可以 static_assert lambda 不是通用的?

我实现了一个 Visit 函数(在变体上),它检查变体中当前活动的类型是否与函数签名(更准确地说是第一个参数)匹配。基于这个不错的答案。例如

这可行,但是当用户传递通用(例如[](auto&){})lambda 时,它会因用户不友好的编译时错误而爆炸。有没有办法检测到这一点并给予好评static_assert()?如果它也可以与函数模板一起使用,而不仅仅是 lambdas,那就太好了。

请注意,我不知道 lambda 可以做什么,所以我不能用 Dummy 类型做一些聪明的事情,因为 lambda 可能会调用类型上的任意函数。换句话说,我不能尝试在 2std::void_t次测试中调用 lambdaint并且std::string如果它有效,则假设它是通用的,因为他们可能会尝试.BlaLol()调用intand string

0 投票
1 回答
208 浏览

c++ - 使用自动说明符获取 lambda 的参数类型

我有一个元函数,它给了我I一个 lambda/函数的 -th 参数的类型:

居住

带有说明符的第二个 lambdaauto无法编译,因为我的 spezializations 不匹配,因为auto它就像一个T未知的模板参数。有没有办法让这项工作f2也有效?

由于 lambda 是一种不透明类型,并且模板函数没有类型,除非使用模板参数类型进行实例化,所以我真的不知道如何使它工作?这是不可能的吗?

0 投票
2 回答
103 浏览

c++ - 使用 lambda 修改由打包参数标识的引用?

我正在尝试在我的 WIP 小型“游戏框架”中创建一个很好的实体组件修改功能。但是,当我尝试修改多个组件(使用打包参数)时,我一直在创建函数

这是我对单个组件的功能,它可以正常工作并且表现得像我喜欢的那样

在尝试为多个组件创建函数时,我发现了 2 个我无法弄清楚如何解决的问题。

但这会产生“不匹配错误”,即使打包参数...C( Velocity, Position) 与 lambda ( Velocity, Position) 中的参数匹配。我想不出解决这个问题。

然而,主要问题是 lambda 参数是否可以像这样的单个 mod 函数那样简化,([](auto& vel, auto& pos)并且也可以作为引用转发。我觉得这应该是可能的,因为编译器没有什么是未知的,但我的 C++ 是有限的。

0 投票
1 回答
53 浏览

c++ - 方法模板作为函子

我有一个容器类模板,其中包含几种不同类型的成员。我想传递一个为每个元素调用的函子。我可以用下面的代码做我想做的事:

虽然使用模板定义结构是可行的operator(),但我错过了定义 lambda 函数时的舒适感。有没有办法使用 lambda 函数来达到与结构相同的效果?或者至少允许我在调用方法中定义操作(这在模板中是不可能的)?

0 投票
1 回答
186 浏览

c++17 - C++模板代码生成错误:在扣除'auto'之前使用'some_variable'

我遇到了这个特定代码的一些问题。该问题很可能与指向Harry存储在tuple中的类型成员的指针以及具有类型变量的向量有关,因为所有其他更简单的变体都可以工作。Harry

我用 g++ 得到的错误:



代码:

如果有人对如何解决这个问题有一些提示,那就太好了。

(我知道这一切看起来毫无意义,为什么有人需要这样做。但是,我的首要任务不是编写好的、可用的代码,而是学习东西,而且我真的想让我想到的这个架构工作.)

0 投票
2 回答
32 浏览

templates - 可变参数元组调用函数中的模板参数不匹配

为什么编译器不能匹配FunctionF中的模板参数。invoke()有没有我不知道的非推断上下文?以及如何解决?

居住

0 投票
2 回答
655 浏览

c++ - 如何将通用 lambda 传递给函数

我有以下 C++ 代码:

f多次通过是丑陋的。是否可以写成MetaTypeHandler()f通过 1 或 2 次?我认为模板模板参数可能会有所帮助,但我无法理解它们。

0 投票
1 回答
324 浏览

c++ - clang vs gcc:可变参数 lambda 捕获

我正在尝试在内部 lambda 中捕获可变参数 lambda 并在那里使用它。例如,考虑以下代码:

这适用于 gcc9,但适用于 clang8 ( https://godbolt.org/z/i2K9cK )。

使代码编译的一种方法是显式捕获[&one...],但我想知道这是否是 clang 中的错误。

也很有趣:将 return 语句更改one为直接展开的内容(在与 组合之前two),这会再次编译: return (((one * ...) * two) + ...);

我找到了这个相关的帖子,但是那里声明的错误似乎已在 clang8 中修复。

0 投票
2 回答
82 浏览

c++ - 当命名 lambda 用作模板类参数或构造函数参数时,类模板无法编译

我目前正在尝试类模板编程,并且在将命名的 lambda 作为其参数传递时遇到了这种奇怪的行为,我无法理解。有人可以解释为什么下面的(1)和(2)不起作用吗?

编译器错误消息:(1)和(2)相同

请原谅我的格式,并编译错误消息片段,因为它与确切的行不匹配。我正在使用 g++ 7.4.0,并使用 c++17 功能进行编译。