我用公共枚举绑定一个类
class Foo {
public:
Foo();
enum class Bar { ALPHA, BRAVO }
};
Foo::Foo() { }
EMSCRIPTEN_BINDINGS(Foo) {
.enum_<Foo::Bar>("FooBar")
.value("ALPHA", Foo::Bar::ALPHA)
.value("BRAVO", Foo::Bar::BRAVO);
}
Run Code Online (Sandbox Code Playgroud)
现在我可以通过以下方式访问 Javascript 中的枚举:
Module.FooBar.ALPHA
Run Code Online (Sandbox Code Playgroud)
但实际上我想通过以下方式访问它:
Module.Foo.Bar.ALPHA
Run Code Online (Sandbox Code Playgroud)
有没有机会通过 Emscripten Bindings 实现这一点,或者以下 hackish JS 代码是唯一的方法吗?
Module.Foo.Bar = Module.FooBar;
delete Module.FooBar;
Run Code Online (Sandbox Code Playgroud)
我从emscripten 讨论组得到了答案
杰杰
我认为 Embind 目前没有这样的命名空间机制。您提供的 JS 代码片段看起来是一个好方法(如果经过测试可以正常工作?)。为了很好地封装它,您应该能够将其放置在绑定函数末尾的 EM_ASM() 块内,以便使其独立,而不必在多个位置保持它们同步。
所以,补丁的结果是:
EMSCRIPTEN_BINDINGS(Foo) {
.class_<Foo>("Foo");
.enum_<Foo::Bar>("Foo.Bar")
.value("ALPHA", Foo::Bar::ALPHA)
.value("BRAVO", Foo::Bar::BRAVO);
EM_ASM(
Module['Foo']['Bar'] = Module['Foo.Bar'];
delete Module['Foo.Bar'];
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |