库函数需要一个 std::function<void(void)>,如何传入类函数?
Library function needs a std::function<void(void)>, how do I pass in a class function?
我正在为嵌入式应用程序创建一个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
配合使用。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 为什么我在使用void函数时得到错误代码C2276
- EASTL矢量<向量<int>>连续的
- void*到驱动程序中的UnicodeString
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 指针没有更新它在void函数内部指向的值
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体