我不知道如何调用以下功能的JS生成的代码:
void printmap(const map<string, vector<string> > &ms)
{
map<string, vector<string> >::const_iterator m1i;
for (m1i = ms.begin(); m1i != ms.end(); m1i++)
{
printf("%s:\n", m1i->first.c_str());
vector<string>::const_iterator m2i;
for (m2i = m1i->second.begin(); m2i != m1i->second.end(); m2i++)
printf("\t%s\n", m2i->c_str());
}
}
更具体地说,JS准备“ ms”参数是什么样子?
答案 0 :(得分:0)
您可以不在JS中调用您的printmap()
。
WebAssembly当前为defines number types only:32/64位整数/浮点数。由于此限制,Emscripten编译的WASM代码可以通过以下类型与JS交互:
我不知道如何,但是指针和引用的行为不同,thus you cannot use a reference type to interact with JS。
您可能在这里猜到,没有办法像map<string, vector<string>
这样的复杂C ++类型。
我总结一下,为您提供一些建议:
void printmap(const map<string, vector<string> > &ms)
到
void printmap(const map<string, vector<string> > *ms)
ms
编写一个初始化函数,以便您可以在JS中执行以下操作:let map_ptr = module._initmap();
...Do something..
module._printmap(map_ptr);
ms
创建getter和setter函数。答案 1 :(得分:0)
网站示例: C ++代码
mass_kilograms
Js代码
#include <emscripten/bind.h>
#include <string>
#include <vector>
using namespace emscripten;
std::vector<int> returnVectorData () {
std::vector<int> v(10, 1);
return v;
}
std::map<int, std::string> returnMapData () {
std::map<int, std::string> m;
m.insert(std::pair<int, std::string>(10, "This is a string."));
return m;
}
EMSCRIPTEN_BINDINGS(module) {
function("returnVectorData", &returnVectorData);
function("returnMapData", &returnMapData);
// register bindings for std::vector<int> and std::map<int, std::string>.
register_vector<int>("vector<int>");
register_map<int, std::string>("map<int, string>");
}
以上述摘录作为参考,不难达到您的要求。