【发布时间】:2021-04-15 13:39:49
【问题描述】:
我想调用一个带有 const 模板值的 lambda,在下面的例子中我应该正确写 lambdaTemplate
#include <iostream>
using namespace std;
template<int bar, int baz>
int foo(const int depth) {
return bar + baz + depth;
}
int main() {
////// call function
cout << foo<1, 2>(10) << endl; // 13
///// call lambda without template value
const auto lambda1 = [&](const int v) {
return foo<1, 2>(v);
};
cout << lambda1(10) << endl; // 13
///// call lambda with template value
const auto lambdaTemplate = [&]<A,B ??? >(const int v) { // <-- ERROR doesn't compile
return foo<A,B>(v);
};
cout << lambdaTemplate<1,2>(10) << endl;
return 0;
}
【问题讨论】:
-
您是否使用了支持 lambda 模板参数的编译器?这是一个相当新的功能(C++20)。在这种情况下,模板参数应该类似于
foo。 -
是的,我使用 C++20
-
即使使用 C++20,模板参数也必须是可推导出的(或者没有好的语法)。无论哪种方式,如果您想要的是捕获
lambdaTemplate<1,2>(10),那是行不通的。 -
不过,您可以让
lambdaTemplate(constant<1>, constant<2>)(10)工作。
标签: c++ templates lambda c++20