【问题标题】:Return a Nan::ObjectWrap from another Nan::ObjectWrap从另一个 Nan::ObjectWrap 返回一个 Nan::ObjectWrap
【发布时间】:2016-12-12 04:43:52
【问题描述】:

我有两个Nan::ObjectWrap 的子类

class Zyre: public Nan::ObjectWrap {...}

class ZyreEvent: public Nan::ObjectWrap {...}

如何从Zyre 中的方法返回ZyreEvent javascript 对象?

我有以下方法,我在其中创建了一个ZyreEvent

NAN_METHOD (Zyre::_recv) {
  Zyre *node = Nan::ObjectWrap::Unwrap <Zyre> (info.Holder ());
  ZyreEvent *zyre_event = new ZyreEvent (node->self);
  info.GetReturnValue().Set(zyre_event->Wrap(info.This()));
}

但我无法包装 zyre_event,因为 Wrap 是受保护的成员。

【问题讨论】:

  • 我也在为此苦苦挣扎,您找到解决方案了吗(除了下面提到的那个)?这是一个非常常见的要求,文档中没有示例,这太不可思议了。

标签: c++ node.js node.js-addon node.js-nan


【解决方案1】:

如果我理解正确,您想从Nan::ObjectWrap 的(子类)另一个Nan::ObjectWrap(子类)的方法实例返回。

注意:我没有经验,所以这可能有错误或错误。我已将我的资料放在括号中,我猜是如何完成的示例。

  1. 在接收自身指针 (NewInstance) 的第一个类中创建 static NewInstance 方法
  2. 使用v8::External 包装第一类的C++ 对象并将其作为New 的参数传递给argcargv 到第一类的构造函数(using v8::External) (v8::External doc)
  3. 编辑第一类的New 方法并处理info.Length() == 1 &amp;&amp; info[0]-&gt;IsExternal() 情况,在这种情况下基本上是复制构造函数(copying passed pointer
  4. 在第二类中使用...::NewInstance()设置返回值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2014-01-22
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多