【问题标题】:Is possible to invoke a templated lambda with explicit specialization?是否可以调用具有显式特化的模板化 lambda?
【发布时间】: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 + 0data(假设T::operator+(int) /*const*/ 没有奇怪的重载);- )
  • 请注意,您要调用 lambda 模板,而在链接(错误命名)问题中,OP 想要调用由 lambda(非模板)初始化的模板变量。

标签: c++ templates lambda visual-studio-2019 template-specialization


【解决方案1】:

不是类/变量是模板,而是它的操作符:

testLamb.operator()<int, 4>(4);

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多