Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类内使用libuv 我试图为C++库编写一个NoDjs绑定,我好像碰到了一个路障。 我正在努力使C++的所有调用异步,这就是为什么我使用 LIBUV 。我基本上是按照教程_C++_Node.js_Asynchronous_Casting_Libuv - Fatal编程技术网

在类内使用libuv 我试图为C++库编写一个NoDjs绑定,我好像碰到了一个路障。 我正在努力使C++的所有调用异步,这就是为什么我使用 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

我希望能够从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);
返回未定义();
}
};
基本上,我希望
Work
After
函数处理类的
数据元素。然而,这似乎不起作用。我已经尝试过从type
void 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_队列_工作处理程序,然后还有一个函数实际执行任务?因此,如果我已经有一个大的代码库来完成这项工作(但没有异步调用)。。。。这将类似于重写整个内容!!!我记不起具体的实现细节,但我成功地使用模板和模板化函数指针实现了一个基类,以提取出许多常见代码。。。但是,最终还是会有很多“额外”代码:(