在类中使用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(); } };
基本上我希望Work
和After
函数能够在类的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函数类似的代码