Emscripten:如何将类中的枚举绑定为 JS 构造函数的属性?

Tho*_*her 1 emscripten

我用公共枚举绑定一个类

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)

Tho*_*her 5

我从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)