C++20 模板 lambda : how to specify template argument?

标签 c++ templates lambda c++20

这个问题在这里已经有了答案:





Familiar template syntax for generic lambdas

(1 个回答)


9 个月前关闭。




假设我有一个 C++20 模板 lambda:

auto foo = []<bool arg>() {
    if constexpr(arg)
        ...
    else
        ...
};
但是我怎么称呼它呢?我似乎找不到语法的描述。我尝试了通常的 foo<true>();template foo<true>(); ,这两个 gcc 似乎都不喜欢。

最佳答案

foo.template operator()<true>();
是正确的语法。试试看 godbolt.org
这种奇怪语法的原因是:
  • foo是一个通用的 lambda,它实现了 template<bool> operator() 方法。
  • foo.operator()<true>()会解释<作为比较运算符。

  • 如果您想要更易读的语法,请尝试使用 std::bool_constant :
    auto foo = []<bool arg>(std::bool_constant<arg>) {
        ...
    };
    
    foo(std::bool_constant<true>{});
    
    试试看 godbolt.org

    关于C++20 模板 lambda : how to specify template argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66182453/

    相关文章:

    c++ - “glGetTexLevelParameter”未在此范围内声明

    c# - 如何根据约定创建返回受限属性集的表达式树?

    ruby - 为什么 lambdas 在 'each' 迭代器中挂起? ruby 2.6.5

    c++ - QPainter 和 QOpenGLWidget 类中的 OpenGL native 代码

    c++ - free(): invalid pointer error in C++

    c++ - 使用模板参数定义 Hana 结构

    python - 如何使用 Django 模板应用外部 URL

    c++ - 使用 SFINAE 检查类型是否可以绑定(bind)到模板模板参数

    lambda - 为什么这个 racket 函数需要一个参数?它是如何工作的?

    c++ - 无法从 C++ 中的链接列表中的对象检索值