【发布时间】:2021-12-03 04:00:38
【问题描述】:
考虑以下 C++ 代码和相应的 Emscripten 绑定。
class IBar {
void qux() = 0;
};
struct BarWrapper : public wrapper<IBar> {
void qux() override {
return call<>("qux");
}
}
EMSCRIPTEN_BINDINGS(IBar) {
class_<IBar>("IBar")
.smart_ptr<std::shared_ptr<IBar>>("IBar")
.function("qux", &IBar::qux)
.allow_subclass<BarWrapper>("BarWrapper");;
}
class Foo {
std::shared_ptr<IBar> getBar() const;
void setBar(std::shared_ptr<IBar> bar);
};
EMSCRIPTEN_BINDINGS(Foo) {
class_<Options>("Foo")
.constructor<>()
.property("bar", &Foo::getBar, &Foo::setBar);
}
在 TypeScript 中,我有以下内容:
class Bar {
qux() {
}
}
const bar = new Module.Bar.implement(new Bar())
这里的问题是Foo::setBar 采用std::shared_ptr 但Module.Bar.implement 返回一个原始指针。这使我无法将bar 传递给Foo::setBar。
有人知道如何在这里将原始指针转换为共享指针吗?或者,有人知道一个好的解决方法吗?
【问题讨论】:
-
只需添加一个
void setBar(IBar* bar);重载? -
是的,我考虑过。然后我可以从原始指针创建一个
shared_ptr。我希望有别的东西,也许是 Emscripten 内置的我还不知道的东西。 -
理想情况下,Emscripten 将支持
new Module.Bar.implement返回智能指针。
标签: c++ shared-ptr webassembly emscripten embind