【发布时间】:2019-10-17 19:46:47
【问题描述】:
我是aware,lambda 闭包类型没有默认构造函数。但这是否意味着它作为模板参数传递后就无法实例化?
考虑以下minimal example:
#include <iostream>
template <typename FuncType>
std::pair<int,int> DoSomething() {
return FuncType()(std::make_pair(1,1));
}
int main() {
auto myLambda = [](std::pair<int,int> x) {
return std::make_pair(x.first*2,x.second*2);
};
std::pair<int,int> res = DoSomething<decltype(myLambda)>();
return 0;
}
出于性能原因,I can't use std::function 以避免虚拟指针调用。有没有办法做到这一点?我需要实例化该 lambda 一次并在该函数中多次使用它。
当decltype(myLambda) 被传递给模板参数中的std::map 比较器时,标准库如何使其工作?
【问题讨论】:
-
对于带有
operator()的匿名类来说,lambda 主要是语法糖。使用您自己的实现 lambda 的operator()声明您自己的命名类。 -
@SamVarshavchik 我希望不必限制用户使用 lambda。我希望它就像我提到的标准库示例一样。
-
我不知道“用户”是什么意思。这个now looks to be like a definite XY problem。也许你应该试着问你真正的问题是什么。不,不是您在这里写的那个,而是您认为答案的真正问题是以这种方式使用 lambda,这就是您要问的问题。也许对于你的真正问题有一个完全不同的解决方案,但不知道它是什么,没有人能帮助你。
-
我觉得我这里有什么不明白的地方。为什么不将 lambda 作为函数参数传递并多次调用?
标签: c++ performance lambda closures c++14