所以我一直在学习模板和 lambda 表达式,所以我尝试将两者结合起来。我正在尝试创建一个模板化的 typedef,它指定了 lambda 应该返回和接受的内容。它适用于非捕获 lambdas,但它不能处理任何捕获的 lambdas。这是我现在的代码:
template<typename T>
using L = T(*)(T);
template<typename T>
T applyLambda(T var, L<T> lambda){
return lambda(var);
}
int main() {
const int a = 45;
int b = applyLambda<int>(3, [] (int x)->int { // non capturing lambda
return x+5;
});
std::cout << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将函数调用更改为:
int b = applyLambda<int>(3, [=] (int x)->int {
return x+a;
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
candidate function template not viable: no known conversion from
'(lambda at main.cpp:15:31)' to 'L<int>' …
Run Code Online (Sandbox Code Playgroud) 我一直在使用这段代码进行一些测试,我明白它的作用,但我突然想到我不知道(*)
在这种情况下应该做什么......
template<typename T>
using L = T(*)(T);
Run Code Online (Sandbox Code Playgroud)
我试过删除它,没有它代码运行得很好。我认为这可能与指针有关,但我不确定。我使用代码片段来定义传递的 lambda 函数的参数和返回值