ssb*_*ssb 4 c++ asynchronous casting node.js libuv
我正在尝试为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();
}
};
Run Code Online (Sandbox Code Playgroud)
基本上我希望Work和After函数能够处理data类的元素.然而,这似乎不起作用.我曾尝试类型转换的指针Work和After之后,从类型void test::(*)(uv_work_t*)到void (*)(uv_work_t*).但这似乎也没有用.
你能给我一些关于如何解决这个问题的技巧吗?
所以你已经意识到,你不能直接调用成员函数.
第二个参数" something "的类型为uv_work_t,其成员为"void*data".
您需要做的是在类中为"工作"和"之后"创建静态方法,创建一个uv_work_t结构,并将数据分配给"this".
一旦在静态"工作"和"后"方法中完成,你就可以对"req-> data"(对你的类类型)进行静态转换,然后调用你的成员函数.
例如:
uv_work_t* baton = new uv_work_t();
baton->data = this;
int status = uv_queue_work(uv_default_loop(), baton, StaticWork, StaticAfter);
Run Code Online (Sandbox Code Playgroud)
然后在静态方法中
test* myobj = static_cast<test>(req->data);
myobj->Work();
Run Code Online (Sandbox Code Playgroud)
和StaticAfter函数类似的代码
| 归档时间: |
|
| 查看次数: |
1831 次 |
| 最近记录: |