在类内部使用libuv
Using libuv inside classes
我正试图为C++库编写nodejs绑定,但似乎遇到了障碍。
我正在努力使对C++库的所有调用都是异步的,这就是我使用libuv
的原因。我基本上遵循这个教程。
我希望能够从libuv的uv_queue_work
调用类成员函数。看看这个代码——
class test {
private:
int data;
void Work(uv_work_t *req);
void After(uv_work_t *req);
public:
Handle<Value> Async(const Arguments& args) {
HandleScope scope;
Local<Function> callback = Local<Function>::Cast(args[0]);
int status = uv_queue_work(uv_default_loop(), **something**, Work, After);
assert(status == 0);
return Undefined();
}
};
基本上,我希望Work
和After
函数处理类的data
元素。然而,这似乎并不奏效。我已经尝试过在从类型void test::(*)(uv_work_t*)
到类型void (*)(uv_work_t*)
之后对指向Work
和After
的指针进行类型转换。但这似乎也不起作用。
你们能给我一些关于如何解决这个问题的建议吗??
因此,正如您所意识到的,您不能直接调用成员函数。
第二个参数"something"的类型为uv_work_t,它有一个成员"void*data"。
您需要做的是在类中为"Work"answers"After"创建静态方法,创建uv_Work_t结构,并将数据分配给"this"。
在静态"Work"answers"After"方法中完成后,对"req->data"(到您的类类型)进行静态强制转换,然后调用您的成员函数。
例如:
uv_work_t* baton = new uv_work_t();
baton->data = this;
int status = uv_queue_work(uv_default_loop(), baton, StaticWork, StaticAfter);
然后在静态方法
test* myobj = static_cast<test>(req->data);
myobj->Work();
StaticAfter函数的类似代码
相关文章:
- 将函数类成员映射到类本身内部
- Boost Spirit,获取迭代器内部语义动作
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 内联函数中具有内部链接的全局变量
- 在函数内部的声明中初始化数组,并在外部使用它
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 卷曲bracers内部结构的声明
- 从函数角度看ID到文件路径的内部与外部映射
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 如何在pugixml中获取节点的内部XML
- 使用C链接在函数内部创建C++模板
- 指针没有更新它在void函数内部指向的值
- 方法内部但循环仍得到预期的不合格id错误C++
- C++:具有内部链接的正向声明常量
- SDL_PollEvent() 无法捕获类函数内部SDL_QUIT?
- libcurl 和 DNS ttl 中的内部连接管理
- 如何修改 lambda 内部字符串的向量
- 如果我将嵌套映射作为多重映射的值,如何将值插入内部映射?
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 在类内部使用libuv