He estado experimentando con Emscripten para llevar potencialmente una API de C++ al ensamblado web.
Pude exportar con éxito funciones y clases individuales de mi API al módulo JS, pero no estoy tan seguro de cómo incrustar espacios de nombres completos de métodos como sus propios objetos JS.
Digamos que tengo NamespaceA y NamespaceB (ejemplo aproximado a continuación), ¿cómo puedo "incorporar" los métodos en estos espacios de nombres a sus propios objetos JS dentro del enlace principal?
// Example namespace A #include "myheaderfile_a.h" uint8_t NamespaceA::functionA(uint8_t a, uint8_t b) { return a+b; } uint8_t NamespaceA::functionB(uint8_t a, uint8_t b) { return a+b*2; } uint8_t NamespaceA::functionC(uint8_t a, uint8_t b) { return b - a; } // Example namespace B #include "myheaderfile_b.h" uint8_t NamespaceB::functionA(uint8_t a, uint8_t b) { return a+b; } uint8_t NamespaceB::functionB(uint8_t a, uint8_t b) { return a+b*2; } uint8_t NamespaceB::functionC(uint8_t a, uint8_t b) { return b - a; }Estoy buscando una estructura de uso de la siguiente manera en Javascript:
const MyModule = require("binding.js"); MyModule.addOnPostRun(() => { console.log(MyModule); // NAMESPACE A MyModule.NamespaceA.functionA(6, 4); MyModule.NamespaceA.functionB(6, 4); MyModule.NamespaceA.functionC(6, 4); // NAMESPACE B MyModule.NamespaceB.functionA(6, 4); MyModule.NamespaceB.functionB(6, 4); MyModule.NamespaceB.functionC(6, 4); });¿Cómo lograría esto?
Intenté exportar un value_object pero parece que no puedo usar un espacio de nombres como tipo. Incluso entonces, no creo que sea correcto intentar exportar una función como un campo:
EMSCRIPTEN_BINDINGS() { value_object<NamespaceA>("NamespaceA") .field("functionA", &NamespaceA::functionA) .field("functionB", &NamespaceA::functionB) .field("functionC", &NamespaceA::functionC) };