问题标签 [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 回答
112 浏览

c++ - 使用静态局部变量获取绑定/推断捕获 lambda 的函数指针

是否可以使用静态局部变量获取捕获 lambda 的 C 样式函数指针?

我正在尝试将派生函数的第一个参数绑定到original参数


使用:

编译失败 - 无法将闭包转换为函数指针

从包装 lambda 中删除参数包(通过更改以下行):

  • auto* function_ptr = +[](auto&&... args)auto* function_ptr = +[]()
  • return bound(std::forward<decltype(args)>(args)...);return bound();

成功编译并运行,尽管我假设通过使用可以在编译时在 lambda 上推断的参数包,不会导致该 lambda 成为这样的闭包(不可转换为函数指针,因为它需要语境)


我理想地试图实现:

whereoriginal是类型void(*)(int, double)并且entry_hook可以将函数指针暴露给传入的 lambda


参考:

此答案将捕获 lambda 转换为函数指针C++ lambda,将捕获作为函数指针

这个答案将 lambda 转换为函数指针获取指向 lambda 的函数指针?

0 投票
2 回答
333 浏览

c++ - C++20模板lambas的限制和使用

C++ 标准大师的几个相关问题。

传入的 C++20引入了模板 lambdas ( P0428R2 )。

所以而不是

我们可以指定模板参数如下

到现在为止还挺好。

第一个问题:模板 lambdas 中的显式模板参数只能从参数推导,还是可以添加非推导的模板参数?

阅读 P0428r1 我没有看到任何明确的限制,但我也没有看到非推导模板参数的示例。

在第一个近似值中,我认为非推导模板参数是合法的,因为我看到以下愚蠢的代码

使用 g++(10.0.0 头)和 clang++(10.0.0 头)编译和运行。

假设允许非推导的模板参数,那么第二个问题是:如何在提供模板参数的同时调用模板 lambda?

例如:给定以下模板 lambda

在没有显式命名的情况下I调用此类 lambda 时是否有一些语法用于指定模板参数?operator()

我试过了

但 the<被解释为关系运算符。

我试过简单地添加template

但它不起作用。

0 投票
1 回答
84 浏览

c++ - c ++ lambda:Currying sum函数:使用按值捕获与按引用返回不同的结果

我有一个非常简单的递归 lambda,它计算给定 2 个数字的总和:

现在同样的功能,首先使用 arg 的引用捕获。

sum_v2得到参数firstas2并且 argsecond也是2.

我知道如何得到正确的结果。我可以使用 sum_v1 或 sum_v3(如下所示)。

How issum_v2在创建 lambda 时,将 argfirst视为 2。我很难理解这一点。

您能否给我一些提示以更好地理解这一点?我在 rhel 7 上使用带有 -std=c++17 的 gcc.9.2.0。

谢谢,高拉夫

0 投票
0 回答
86 浏览

c++ - lambda 作为模板函数中静态变量的一部分

假设我们S在头文件中定义了一个包含 2 个成员(1 个 int 和 1 个 functor)的简单结构。我们在模板函数中创建一个这样的结构作为静态 const 变量,foo并返回这个结构的 const 引用。在c ++ 17中合法吗?我尝试调用foo<int>2 个翻译单元,它适用于 clang/gcc,但适用于 Visual Studio。使用 Visual Studio,第二个调用者返回错误m_n(0 而不是 5)。

0 投票
2 回答
80 浏览

c++ - 在实现文件中使用头文件的通用 lambda

我在标题中有这种类型MyType.hpp

因此,someMethod使用接受泛型参数的泛型 lambda 调用。是否有可能在MyType.cppfor中提供一个实现someMethod?这不起作用:

由于不允许部分特化(仅对函数模板进行完全特化),有没有其他方法可以将头文件的 lambda “传递”到实现文件MyType.cpp?如果无法通过,是否存在一种动态存储此 lambdaMyType.hpp并在其中访问它的方法MyType.cpp

0 投票
1 回答
339 浏览

python - 在 Python 中使用 Lambda 表达式进行情感分析

我正在尝试使用 TextBlob 在 Power BI 中执行情绪分析。我想使用 lamdba 表达式,因为它似乎比在 Power BI 中运行迭代循环要快得多。

例如,使用文本 Blob:

创建一个名为“极性分数”的 Power BI 数据列,其中包含来自 TextBlob 的数值。

我想对 TextBlob.classify() 函数做类似的事情。但是,我不知道如何将分类器的第二个参数传递给它。

教程展示了如何创建和使用分类器:

我试过了

两者都不起作用并指出我通过分类器的方式。如何在 lambda 表达式中传递分类器参数?

0 投票
1 回答
51 浏览

c++ - std::visit 不识别类型

我很困惑,经过一些代码重构后,以下代码不再起作用,因为它跳转到auto, auto案例并忽略了该案例Complex, Complex。诚然,我不太明白重载到底在做什么,但对我来说,这两个代码看起来完全一样,除了一个直接获取它的参数,而另一个具有在函数体本身中定义的参数。

代码打印

这是重构之前的工作代码:

我唯一能想到的是,它obj1并不是obj2真正想要的类型,但打印std::cerr证明它们是。那么为什么 std::visit 不能识别它,我该如何解决呢?

0 投票
1 回答
501 浏览

c++ - 如何在 lambda 中调用 std::visit,访问者是由值捕获的函数对象

std::visit使用作为值捕获的函数对象的访问者在 lambda中调用似乎并不简单。不过,通过引用捕获效果很好。为什么会这样,是否有可能做到这一点?

在这种情况下,我不理解来自 MSVC 2017 的编译错误消息:

std::visit': 找不到匹配的重载函数
无法专门化函数模板未知类型 std::visit(_Callable &&,_Variants &&...)

我假设模板参数推导的行为与仅在std::visit没有包装调用的 lambda 的情况下调用非常相似。

说明问题的代码:

0 投票
2 回答
56 浏览

c++ - 递归调用包装函数时 lambda 函数的内部工作

考虑以下代码:

现在,在这段代码中,每当foo递归调用函数时,都会将一个activation recordoffoo 压入堆栈。我想知道的是,记录中是否包含 lambda 函数及其定义?嗯..没有帮助

0 投票
2 回答
371 浏览

c++ - 如何获取泛型 lambda 的返回类型和参数类型?

我想获取 lambda 的返回类型和参数类型。 是否可以确定 lambda 的参数类型和返回类型?给出一个解决方案。但它不适用于通用 lambda。

那么如何解决它来获取泛型 lambda 的返回类型和参数类型呢?