gpt4 book ai didi

c++ - 在类中使用 libuv

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:16 24 4
gpt4 key购买 nike

我正在尝试为 C++ 库编写 nodejs 绑定(bind),但我似乎遇到了障碍。

我正在尝试使对 C++ 库的所有调用都是异步的,这就是我使用 libuv 的原因。我基本上是在关注 this教程。

我希望能够从 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 元素上工作。然而,这似乎不起作用。我已经尝试在从类型 void test::(*)(uv_work_t*)void 之后将指向 WorkAfter 的指针进行类型转换(*)(uv_work_t*)。但这似乎也不起作用。

你们能给我一些关于如何解决这个问题的提示吗??

最佳答案

所以你已经意识到,你不能直接调用成员函数。

第二个参数“something”是 uv_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();

和 StaticAfter 函数的类似代码

关于c++ - 在类中使用 libuv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12035200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com