首页 > 解决方案 > 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 EventCallbackusing EventCallback = void(Event& event);不再起作用时“没有可行的Application.cpp:10:34转换Foo::Callback aka (...)

是否std::function充当“胶水”,Bar在请求时引用但公开正确的签名?

标签: c++

解决方案


推荐阅读