c++ - Emscripten:创建包装器以允许子类时出现“分配抽象类类型的对象”错误
问题描述
考虑以下人为设计的示例:
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
.
有谁知道这个问题的解决方法?
解决方案
推荐阅读
- plotly - plotly dash 更新条形图上的数据表数据单击
- javascript - 在 UseEffect 中使用 `dispatch` 钩子
- class - c++ 中的设计选择
- ios - Invalid Bundle Structure 上传到应用商店时,xCode 11 中不允许使用二进制文件
- sockets - 可以从 Linux 内核数据类型“struct sock”中检索套接字的端口吗?
- windows - 为什么有些驱动器具有 FILE_ATTRIBUTE_HIDDEN 和 FILE_ATTRIBUTE_SYSTEM 属性?
- ruby-on-rails - 如何使用设计强制注销除 current_user 之外的用户
- elasticsearch - 在 elasticsearch 6.5.4 中配置 x-pack 后集群未加入
- gradle - 需要使用 Gradle 构建和更新现有 jar 文件的步骤
- apache-flink - 2 SideOutputs 行为的联合