带模板的 C++ Lambda

标签 c++ templates lambda c++20

我想用 const 模板值调用 lambda,在下面的示例中我应该正确编写 lambdaTemplate

#include <iostream>

using namespace std;

template<int bar, int baz>
int foo(const int depth) {
    return bar + baz + depth;
}

int main() {
    ////// call function
    cout << foo<1, 2>(10) << endl; // 13

    ///// call lambda without template value
    const auto lambda1 = [&](const int v) {
        return foo<1, 2>(v);
    };
    cout << lambda1(10) << endl; // 13

    ///// call lambda with template value
    const auto lambdaTemplate = [&]<A,B ??? >(const int v) { // <-- ERROR doesn't compile
        return foo<A,B>(v);
    };

    cout << lambdaTemplate<1,2>(10) << endl;

    return 0;
}

最佳答案

你可以这样定义 lambda :

auto lambdaTemplate = [&]<int T1, int T2>(const int v) {
    return foo<T1, T2>(v);
};

并称它为

std::cout << lambdaTemplate.operator()<1,2>(10);

关于带模板的 C++ Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65652859/

相关文章:

java - 等效于 Java 中的 Python 的 lambda 函数?

c++ - 无法理解 int 和用户定义类型之间的名称查找差异 - 可能与 ADL 相关

c# - 为什么 c# 中的 lambda 似乎以不同方式处理 bool 返回值?

c++ - 使用 C++ 针对 xsd 验证 xml

c++ - 引用或返回 - 最佳实践

c++ - 为什么这个 sfinae 不起作用?

c++ - 如何在C++中使用 "type ... pack-name"参数包?

c# - 如何在 C#/.NET 中使用 LINQ 表达式树调用 lambda

c++ - 使用 OpenGL 绘制时钟的小时标记

c++ - "typename vector<T>::iterator"编译器无法识别