我正在为嵌入式应用程序创建一个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);
在这种情况下,我可以将此方法设为静态,但这是必需的吗?
答案 0 :(得分: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
配合使用。