【问题标题】:C++20 template lambda: how to specify template argument? [duplicate]C++20模板lambda:如何指定模板参数? [复制]
【发布时间】:2021-05-16 19:55:18
【问题描述】:

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

auto foo = []<bool arg>() {
    if constexpr(arg)
        ...
    else
        ...
};

但是我该怎么称呼它呢?我似乎找不到语法的描述。我尝试了通常的foo&lt;true&gt;();template foo&lt;true&gt;();,这两个gcc 似乎都不喜欢。

【问题讨论】:

    标签: c++ templates lambda c++20


    【解决方案1】:
    foo.template operator()<true>();
    

    是正确的语法。试试godbolt.org

    之所以出现这种奇怪的语法是因为:

    如果您想要稍微更易读的语法,请尝试使用std::bool_constant

    auto foo = []<bool arg>(std::bool_constant<arg>) {
        ...
    };
    
    foo(std::bool_constant<true>{});
    

    试试godbolt.org

    【讨论】:

    • 这表明使用此语言功能的惯用方式与这种情况有些不同:)
    • @lubgr 同意,当从函数参数中推导出 lambda 上的显式模板参数时,它会更惯用。
    • @lubgr:该功能的重点是允许从函数参数中的模式中推断模板参数类型(能够做到[]&lt;class T&gt;(std::vector&lt;T&gt; const &amp;vt)),而不是将模板参数直接传递给函数。
    • 谢谢@PatrickRoberts!虽然我确实阅读了该页面,但我并没有完全弄清楚这是如何称呼它的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2021-02-07
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多