以下代码尝试创建一个 templated lambda 并将其传递给调用它的函数。但是编译失败,因为
lambda
参数的类型错误。
#include <functional>
void foo(std::function<void(void)>&lambda) {
lambda.template operator()<int>();
}
int main() {
auto f = []<class T>() {};
foo(f);
}
我应该如何定义接收模板化 lambda 的参数类型?
使用
auto
可以工作,但我需要显式类型(因此我可以修改 foo
以返回 lambda 返回的任何内容)。
void foo(auto &lambda) { // Works but not what I want
我尝试过这个但没有编译:
template<class T>
void foo(std::function<void<T>(void)>&lambda) {
所谓的模板 lambda 和普通 lambda 之间的区别在于
operator()
是一个模板。否则 lambda 本身的类型没有太大区别。它是一种独特的未命名类型。
我应该如何定义接收模板化 lambda 的参数类型?
与非模板化 lambda 相同。
...但我需要显式类型(这样我可以修改 foo 以返回 lambda 返回的任何内容)。
您不需要知道 lambda 的类型。
auto foo(auto &lambda) {
auto ret = lambda();
return ret;
}
lamdba的返回类型是
decltype(lambda())
(如果需要可以添加std::decay_t
)。