4

私は2つのサブクラスを持っていますNan::ObjectWrap

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

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

ZyreEventのメソッドから JavaScript オブジェクトを返すにはどうすればよいZyreですか?

次のメソッドがあり、次のメソッドを作成します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

4

1 に答える 1

1

Nan::ObjectWrap私の理解が正しければ、別の (サブクラスの) の (サブクラスの) メソッド インスタンスから戻りたいと考えていますNan::ObjectWrap

注:私は経験がないので、これには欠陥があるか間違っている可能性があります。ソースを括弧内に入れました。ここでは、それがどのように行われたかの例を示しています。

  1. static NewInstance自分自身のポインタを受け取る最初のクラスにメソッドを作成します ( NewInstance )
  2. 最初のクラスの C++ オブジェクトをラップし、 withおよび最初のクラスのコンストラクターv8::Externalの引数として渡すために使用します ( v8::External を使用) ( v8::External doc )Newargcargv
  3. この場合、基本的にコピーコンストラクターであるファーストクラスのNewメソッドとハンドルinfo.Length() == 1 && info[0]->IsExternal()ケースを編集します(渡されたポインターをコピーします
  4. 2 番目のクラスで使用...::NewInstance()して戻り値を設定する
于 2016-09-30T00:10:33.560 に答える