【发布时间】:2018-06-08 14:03:45
【问题描述】:
是否可以在 C++ 中使用默认泛型参数定义 lambda?
int main(){
auto lambda = [](auto i = 0){return i;};
std::cout<<lambda()<<"\n"; // this does not compile
std::cout<<lambda(4)<<"\n"; // this does compile
auto lambda2 = [](int i = 0){return i;};
std::cout<<lambda2()<<"\n"; // this is also OK
}
我想知道是否可以重现类似这个函子的东西,为什么不可以
struct Lambda{
template<typename T=int>
auto operator()(T i=1){ return i;}
};
【问题讨论】:
-
lambda的问题是它会产生类似struct Lambda{ template<typename T> auto operator()(T i=1) const{ return i;} };的东西,不能用作Lambda{}()。 -
在 C++20 中使用模板 lambda 是可能的
-
@Jarod42 但是为什么在你的例子中推论不起作用?
-
@HolyBlackCat: "非推导上下文是: [...] — 用于函数形参的形参类型中的模板形参,该形参具有正在使用的默认实参正在进行参数推导的调用。”.
标签: c++ c++11 lambda c++14 auto