0

我正在为嵌入式应用程序创建一个 C++ 类,而我正在使用的库定义了一些期望函数参数设置回调的函数:

class WebServer
{
public:
    typedef std::function<void(void)> THandlerFunction;
    void on(const String &uri, THandlerFunction handler);
}

我在我的使用这个类:

MyWebControl::MyWebControl()
{
    WebServer _server(80);
}

MyWebControl::onHandler()
{
    // do stuff
}

现在我需要onHandler使用_server对象的函数“连接”我的on()函数:

MyWebControl::MyWebControl()
{
    WebServer _server(80);
    _server.on("/", onHandler);
}

但这给了我一个编译器错误:

错误:无效使用非静态成员函数_server.on("/", onHandler);

在这种情况下,我可以将此方法设为静态,但有必要吗?

4

1 回答 1

3

它需要您传递一个指向MyWebControl回调将被调用的指针。幸运的是,这很容易!

std::bind是为了:

_server.on("/", std::bind(&MyWebControl::onHandler, this));

或者一个 lambda:

_server.on("/", [this]() { this->onHandler(); });
// (the `this` isn't even needed!)

两者都将与您std::function很好地合作。

于 2018-10-30T19:20:07.253 回答