库函数需要一个 std::function<void(void)>,如何传入类函数?

Library function needs a std::function<void(void)>, how do I pass in a class function?

本文关键字:void gt 类函数 何传入 function 一个 库函数 std lt      更新时间:2023-10-16

我正在为嵌入式应用程序创建一个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
}

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

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

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

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

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

它需要将一个指针传递到将在其上调用回调的MyWebControl。幸运的是,这很容易!

这就是std::bind的作用:

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

或者lambda:

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

两者都将很好地与您的std::function配合使用。