Emscripten: Как создать/использовать std::unique_ptr в JavaScript (машинописный текст)?

#c #webassembly #emscripten #embind

Вопрос:

У меня есть код на C , который принимает std::unique_ptr . Мне нужно вызвать этот код из машинописного текста.

 class Foo {

}

class Bar {
    void qux(std::unique_ptr<Foo> amp;amp;foo);
}
 

Emscripten имеет встроенную поддержку std::shared_ptr , но я не могу понять, как создать std::unique_ptr объект, в данном случае Foo . Вот привязки для Foo .

 EMSCRIPTEN_BINDINGS(Foo) {
    smart_ptr_trait<std::unique_ptr<Foo>>();

    class_<Foo>("Foo")
        .smart_ptr_constructor("Foo", amp;std::make_shared<Foo>);
}
 

Вот что я делаю в машинописном виде:

 const wasm = // Load WebAssembly module

const foo = wasm.Foo() // I know that this is technically a `std::shared_ptr`, but it's the only smart pointer I know how to make.

const bar = wasm.Bar()
bar.qux(foo)
 

Это приводит к UnboundTypeError: Cannot call Bar.qux due to unbound types: NSt3__210unique_ptrIN74FooENS_14default_deleteIS2_EEEE ошибке.

Вопросы

  1. Кто-нибудь знает, как создать уникальный указатель для Foo ?
  2. Кто-нибудь знает, как привязать уникальный указатель?
  3. Кто — нибудь знает, что smart_ptr_trait на самом деле происходит? Основываясь на его документации, я подумал, что это позволит мне зарегистрировать уникальный указатель. Похоже, что это не так.