考虑以下 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
.
有谁知道如何在这里将原始指针转换为共享指针?或者,有人知道一个好的解决方法吗?