c++ - std::function 是否保留对捕获变量的引用
问题描述
我想了解为什么以下工作:
class Foo {
public:
using Callback = std::function<void(std::string& string)>;
void setCallback(Callback&& callback) { windowInfo = callback; };
private:
Callback windowInfo;
};
class Bar {
Bar() { foo->setCallback([this](std::string& e) { sayHello(e); });}
void sayHello(std::string& name) { //do something }
Foo* foo;
};
Foo::setCallback
要求一个没有捕获的函数,但是,我传递了一个捕获Bar
. 我希望编译器会抱怨void(Bar, string)
!= void(string)
。由于我传入一个成员函数,它必须隐式传递 $this 参数作为第一个参数。使函数签名不等效。
编辑
为什么当我突然重新定义using EventCallback
这using EventCallback = void(Event& event);
不再起作用时“没有可行的Application.cpp:10:34
转换Foo::Callback aka (...)
是否std::function
充当“胶水”,Bar
在请求时引用但公开正确的签名?
解决方案
推荐阅读
- javascript - 将结果 .js 传递给另一个 .js
- javascript - 使用 innerHTML.indexOf 将内容隐藏到特定城市
- python - pandas:无法通过单个字符串更新空数据框
- python-3.x - 如何执行另一个 Python 脚本(服务器)但同时保持当前脚本运行
- gradle - 无法解析其他项目配置
- python - 用逗号替换每行中的多个空格
- java - JavaFXPlugin 编译错误(Java 版)
- python - 有没有办法打破两个while循环?
- php - 在 Laravel 5.8 中使用 Sweet Alert 2 删除确认
- sql - 计算两个日期之间的整年和部分月份