#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
ошибке.
Вопросы
- Кто-нибудь знает, как создать уникальный указатель для
Foo
? - Кто-нибудь знает, как привязать уникальный указатель?
- Кто — нибудь знает, что
smart_ptr_trait
на самом деле происходит? Основываясь на его документации, я подумал, что это позволит мне зарегистрировать уникальный указатель. Похоже, что это не так.