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

时间:2016-01-22 14:05:15

标签: 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);
}

现在我可以通过以下方式访问Javascript中的枚举:

Module.FooBar.ALPHA

但实际上我想通过以下方式访问它:

Module.Foo.Bar.ALPHA

有没有机会通过Emscripten Bindings实现这一目标,还是以下hackish JS代码是唯一的方法?

Module.Foo.Bar = Module.FooBar;
delete Module.FooBar;

1 个答案:

答案 0 :(得分:2)

我从emscripten-discuss group

得到了答案
  

jj

     

我不认为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'];
    );
}