考虑以下人为设计的示例:
class IBar {
void qux() = 0;
};
class IFoo {
void execute(const IBar &bar) = 0;
};
struct FooWrapper : public wrapper<IFoo> {
EMSCRIPTEN_WRAPPER(FooWrapper);
void execute(const IBar &bar) override {
return call<void>("execute", bar);
}
};
EMSCRIPTEN_BINDINGS(IFoo) {
class_<IFoo>("IFoo")
.function("execute", &IFoo::execute, allow_raw_pointers(), pure_virtual())
.allow_subclass<FooWrapper>("FooWrapper");
}
如果我尝试编译此代码,则会收到错误消息,因为我正在尝试“分配抽象类类型的对象IBar
”。
/emsdk/upstream/emscripten/cache/sysroot/include/emscripten/wire.h:348:28: error: allocating an object of abstract class type 'IBar'
return new T(v);
显然IBar
是抽象的,但这无关紧要,因为execute
它引用了一个IBar
对象。似乎出于某种未知原因emscripten::call
试图实例化。IBar
在我的实际代码中,我无法更改IFoo::execute
.
有谁知道这个问题的解决方法?