我是 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
比较器时,标准库如何使其工作?
最佳答案
虽然这个特性在 C++20 中出现(参见 songyuanyao 的回答),但在这种情况下你实际上并不需要它。您可以将 lambda 作为 FuncType
类型的函数参数传递并多次调用:
template <typename FuncType>
std::pair<int,int> DoSomething(FuncType f)
{
return f(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(myLambda);
}
关于c++ - 如何在 C++11/14 中实例化 lambda 闭包类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56407294/