【发布时间】:2021-10-13 21:19:15
【问题描述】:
我正在尝试使用具有两个专业化的 lambda,但似乎我做错了什么。我试图在这里搜索,但我什么也找不到,除了这个:
How to invoke a lambda template?
这对我来说没有太大帮助。拜托,你能告诉我我应该如何用我的专业化调用 lambdas 吗?我正在使用 Visual Studio 2019 16.9.2(我还不能更新)
auto testLamb = []<typename T, int max = 2>(T data)
{
if constexpr (max == 0)
{
return data;
}
else
{
return data + max;
}
};
int f1 = testLamb<int, 4>(4); // Error C2062 !!
int f2 = testLamb(5); // OK!
【问题讨论】:
-
“有两个特化”,
data + max对这两种情况都有效,因为data + 0是data(假设T::operator+(int) /*const*/没有奇怪的重载);- ) -
请注意,您要调用 lambda 模板,而在链接(错误命名)问题中,OP 想要调用由 lambda(非模板)初始化的模板变量。
标签: c++ templates lambda visual-studio-2019 template-specialization