2016-08-05 5 views
3

У меня есть два подкласса Nan::ObjectWrapВозвратить Nan :: ObjectWrap из другого Нэн :: ObjectWrap

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

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

Как я могу вернуть ZyreEvent JavaScript Object из метода в 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 является защищенным членом.

ответ

1

Если я правильно понял, вы хотите вернуть экземпляр метода (подкласс) Nan::ObjectWrap другого (подкласса) Nan::ObjectWrap.

Примечание: Я не испытываю, так что это может иметь недостатки или быть неправдой. Я поставил свои источники в скобки, где примеры того, как это делается, я думаю.

  1. Создать static NewInstance метод в первый класс, который принимает указатель себя (NewInstance)
  2. Используйте v8::External, чтобы обернуть первый класс C объект ++ и передать его в качестве аргумента для New с argc и argv к первому классу конструктор (using v8::External) (v8::External doc)
  3. Редактировать первый класс New метод и обрабатывать info.Length() == 1 && info[0]->IsExternal() случай, который в основном конструктор копирования в этом случае (copying passed pointer)
  4. Использовать ...::NewInstance() во втором классе для установки возвращаемого значения

 Смежные вопросы

  • Нет связанных вопросов^_^