c++ 11在公共函数中设置lambda

C++11 setting lambda in public function

本文关键字:设置 lambda 函数 c++      更新时间:2023-10-16

如何正确解决这个问题?

 class House{
 public:
  void startAction();
  void init(){
      startAction = [] () {}; 
  }  
 };

我已经尝试过了,但是它说"表达式是不可分配的"

我想定义startAction函数,但是在init方法中。

我这样做是因为有几个变量在init方法中,我想捕捉传递给startAction

不能给成员函数赋值。

可以有一个成员函数调用的成员变量,像这样:

class House{
 public:
  void startAction() { m_action(); }
  void init(){
      m_action = [] () {}; 
  }
 private:
  std::function<void()> m_action;  
};

但是将想要捕获的内容存储为House的成员更简单。

试试这个:

class House {
  public:
    std::function<void ()> startAction;
    void init() {
        startAction = []() {};
    }  
};
int main() {
    House house;
    house.init();
    house.startAction();
    ...
}

你也可以用C风格的指针来代替std::function<void ()>。请看下面的代码:

#include <iostream>
typedef void (*my_func)();
class House
{
public:
    my_func  m_ffunc;
    void init()
    {
        m_ffunc = [](){ std::cout << "Hello from m_ffunc" << std::endl;};
    }
};
int main()
{
    House myHouse;
    myHouse.init();
    myHouse.m_ffunc();
    return 0;
}