小编Mar*_*vić的帖子

如何在捕获 lambda 参数时使用模板化的 typedef?

所以我一直在学习模板和 lambda 表达式,所以我尝试将两者结合起来。我正在尝试创建一个模板化的 typedef,它指定了 lambda 应该返回和接受的内容。它适用于非捕获 lambdas,但它不能处理任何捕获的 lambdas。这是我现在的代码:

template<typename T>
using L  = T(*)(T);

template<typename T>
T applyLambda(T var, L<T> lambda){
  return lambda(var);
}

int main() {
  
  const int a = 45;

  int b = applyLambda<int>(3, [] (int x)->int { // non capturing lambda
    return x+5;
  });

  std::cout << b << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将函数调用更改为:

int b = applyLambda<int>(3, [=] (int x)->int {
    return x+a;
  });
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

candidate function template not viable: no known conversion from
      '(lambda at main.cpp:15:31)' to 'L<int>' …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates c++11

3
推荐指数
1
解决办法
244
查看次数

使用 L = T(*)(T); 的 template&lt;typename T&gt; 中的 (*) 是什么意思?

我一直在使用这段代码进行一些测试,我明白它的作用,但我突然想到我不知道(*)在这种情况下应该做什么......

template<typename T>
using L  = T(*)(T);
Run Code Online (Sandbox Code Playgroud)

我试过删除它,没有它代码运行得很好。我认为这可能与指针有关,但我不确定。我使用代码片段来定义传递的 lambda 函数的参数和返回值

c++ templates function-pointers function c++11

3
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×2

c++11 ×2

templates ×2

function ×1

function-pointers ×1

lambda ×1