在类中使用libuv

我正在尝试为C ++库编写一个nodejs绑定,我似乎遇到了一个障碍。

我正在努力使所有的C ++库的调用asynchronous,这就是为什么我使用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(); } }; 

基本上我希望WorkAfter函数能够在类的data元素上工作。 但是,这似乎并没有工作。 我试过从types为void test::(*)(uv_work_t*)void (*)(uv_work_t*)types指针。 但是,这似乎也没有工作。

你们可以给我一些关于如何解决这个问题的技巧吗?

正如你所意识到的,你不能直接调用成员函数。

第二个参数“ something ”的types是uv_work_t,它有一个成员“void * data”。

你需要做的是在你的类的“Work”和“After”中创build一个静态方法,创build一个uv_work_t结构,并将数据分配给“this”。

一旦在你的静态“Work”和“After”方法中完成,你可以对“req-> data”(对你的类types)进行静态转换,然后调用你的成员函数。

例如:

 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函数类似的代码