在类内使用libuv 我试图为C++库编写一个NoDjs绑定,我好像碰到了一个路障。 我正在努力使C++的所有调用异步,这就是为什么我使用 LIBUV 。我基本上是按照教程
我希望能够从libuv的在类内使用libuv 我试图为C++库编写一个NoDjs绑定,我好像碰到了一个路障。 我正在努力使C++的所有调用异步,这就是为什么我使用 LIBUV 。我基本上是按照教程,c++,node.js,asynchronous,casting,libuv,C++,Node.js,Asynchronous,Casting,Libuv,我希望能够从libuv的uv\u queue\u work调用类成员函数。看看这个代码-- 类测试{ 私人: int数据; 无效工作(紫外线工作要求); 之后无效(紫外线工作要求); 公众: 句柄异步(常量参数和参数){ 手镜镜; 本地回调=Local::Cast(args[0]); int status=uv\u queue\u work(uv\u default\u loop(),**某物**,work,After); 断言(状态==0); 返回未定义(); } }; 基本上,我希望Wor
uv\u queue\u work
调用类成员函数。看看这个代码--
类测试{
私人:
int数据;
无效工作(紫外线工作要求);
之后无效(紫外线工作要求);
公众:
句柄异步(常量参数和参数){
手镜镜;
本地回调=Local::Cast(args[0]);
int status=uv\u queue\u work(uv\u default\u loop(),**某物**,work,After);
断言(状态==0);
返回未定义();
}
};
基本上,我希望Work
和After
函数处理类的数据元素。然而,这似乎不起作用。我已经尝试过从typevoid test:(*)(uv\u-Work\u-t*)
到void(*)(uv\u-Work\u-t*)键入指向Work
和After
的指针。但这似乎也不起作用
你们能给我一些关于如何解决这个问题的建议吗???所以你们已经意识到,你们不能直接调用成员函数
第二个参数“something”属于uv\u work\t类型,它有一个成员“void*data”
您需要做的是在类中为“Work”和“After”创建静态方法,创建一个uv_-Work_-t结构,并将数据分配给“this”
在静态“Work”和“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();
test*myobj=static\u cast(请求->数据);
myobj->Work();
StaticAfter函数的类似代码是的。。。。我在尝试类似的东西。。。但是这会不会导致编写大量额外的代码?我的意思是,你将有一个函数用于javascript调用,两个函数用于uv_队列_工作处理程序,然后还有一个函数实际执行任务?因此,如果我已经有一个大的代码库来完成这项工作(但没有异步调用)。。。。这将类似于重写整个内容!!!我记不起具体的实现细节,但我成功地使用模板和模板化函数指针实现了一个基类,以提取出许多常见代码。。。但是,最终还是会有很多“额外”代码:(