具有非类型模板参数的C ++ 20 lambda

ThreeStar程序员57

我正在弄乱新的C ++ 20 lambda,看来我可以声明一个接受非类型模板参数的lambda,但是后来我无法调用它。

#include <iostream>

int main() {

    // compiles fine
    auto f = []<bool ok>() { return ok; };

    // it even has an address??
    std::cout << &f;

    // f();    // error : no matching function for call to object of typ
    // f<true>(); // error : invalid operands to binary expression

    f.operator()<true>(); // compiles but somewhat... ugly
}

我在这里查看了相关的文章但在这种情况下似乎没有提及调用语法。

是否在lambda调用站点上显式传递模板参数?这将是一个令人失望的限制,因为我认为这样做的目的是使Lambda能够执行与模板一样的工作。

慈济

是否在lambda调用站点上显式传递模板参数?

否,但是问题是您没有为正确的实体指定模板参数。请注意,f它本身不是模板。它是非模板类型的对象,其中包含operator()已模板化的成员

因此,当您这样做时:

f<true>(); // error

您为指定了模板参数f,但由于f它不是模板,因此会出现错误。

另一方面,如您所见,此调用:

f.operator()<true>();  // ok

是好的,因为你指定的模板参数foperator()这的确是一个模板。

另外,此问题与lambda的非类型模板参数无关,如果它也是类型模板参数,也会发生相同的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ 20:非类型模板参数中的非捕获lambda

非类型模板参数的推断类类型的占位符是否是C ++ 20功能?

C ++ 20非类型模板参数,它是先前类型参数中的模板:不是有效模板arg,因为不是变量

非类型模板参数中的constexpr lambda求值

为什么将lambda用于非类型模板参数时gcc失败?

C ++ 20模板lambda:如何指定模板参数?

带有与函数参数无关的模板参数的 C++20 模板 lambda

具有模板非类型模板参数的功能模板

可以指定C ++ 20模板化的lambda来推断嵌套在参数中的类型吗?

将lambda参数完美转发到成员函数,其中成员函数是非类型模板参数

lambda的仅类型模板参数

非类型模板参数不能具有类型

当C ++ 14已经具有通用lambda时,在C ++ 20中引入的模板lambda有什么需求?

具有非类型模板参数的构造函数

如何静态断言该类型对于 c++20 中的模板非类型参数是可行的

通过lambda作为模板参数?(c ++ 20,未评估上下文中的lambda)

具有非类型模板的结构的C ++实例化

参数类型模板类型中的泛型 lambda auto

使用模板 lambda C++20 连接函数调用

c++20 模板 lambda 的用例是什麼?

C++ - 在具有非类型模板参数的模板化类上专门化函数模板

通过参数传递 lambda(无函数类型模板)

在 C++20 中声明具有依赖类型参数的模板函数

非类型模板参数

使用类属性调用具有非类型模板参数的模板函数

具有非类型模板参数的功能模板中的static_assert

模板中的 C++ 20 lambda:无法从 lambda 推导出“auto*”

具有用户定义类型的自动非类型模板参数

C++ lambda 函数的 CC 模式缩进,其返回类型具有模板参数