首页 > 解决方案 > lambda函数中的参数列表类型错误

问题描述

我对 lambda 表达式 C++11 不是很熟悉。我试图简单地从另一个类中调用一个方法,该方法采用一个整数并构造一个 lambda 表达式,但我收到一个关于参数不是正确数据类型的错误。

class A{

  int _a;
  void f(int a){
    _a = a;
  }

};

class B{

  B(){

    A instance = new A();

    instance.f(
    [&](int input)->int
    {
      int x = 2;
      return x;
     });

  };

}

标签: c++c++11lambda

解决方案


lambda 实际上只是编写函数的一种紧凑方式。

有问题的 lambda:

[&](int input) -> int
{
    int x = 2;
    return x;
};

是一个未命名的函数,采用一个int参数(它不使用)并返回int. 它还使用引用语义捕获其上下文,它也没有使用它。

如果您想将 lambda 与需要 的函数结合使用int,则需要调用lambda,可能像这样:

class A
{
public:
    void f(int a){
        _a = a;
    }
private:
    int _a;
};

class B
{
public:
    B()
    {
        A instance; // = new A(); <- not C++

        auto mylambda = 
            [](int input) -> int
            {
                int x = 2;
                return x;
            };

        instance.f( mylambda(3) );
    }
};

推荐阅读