2016-01-22 81 views
0

我把一個類與公共枚舉Emscripten:如何將類內的枚舉綁定爲JS構造函數的屬性?

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來實現這個目標,或者是下面這個黑客JS代碼的唯一途徑?

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

回答

1

我從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']; 
    ); 
} 
相關問題