c++ 11在公共函数中设置lambda
C++11 setting lambda in public function
如何正确解决这个问题?
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;
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 可组合的lambda/std::函数与std::可选
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 使用 lambda 表达式的 Raspbian G++ 8.3.0 导致 ']' 之前的预期主表达式 - 即使标准设置为 c++14
- 如何在Visual Studio 2017上将类方法设置为参数并将它们与lambda一起使用?
- C++ 如何使用 lambda 将 FFMPEG 的 av_log_set_callback() 设置为成员函数?
- 范围之后,在Lambda中设置的共享指针
- c++ 11在公共函数中设置lambda
- 在lambda设置中访问两步声明的成员