Вы можете , а не позвонить на printmap()
в JS.
WebAssembly в настоящее время определяет только числовые типы : 32/64-битное целое число / число с плавающей запятой.Из-за этого ограничения скомпилированный Emscripten код WASM может взаимодействовать с JS с помощью следующих типов:
- Числовые типы (целые числа и числа с плавающей запятой)
- Типы указателей (путем обработки целого числа смещения дляадрес памяти WASM 0x00000000)
- A указатель байтового (или целочисленного) массива
- A указатель строки (хотя это * 1021)* не просто )
- указатель экземпляра класса (через Embind )
Я не знаю, как указатели и ссылки ведут себя по-разному, , таким образом, вы не можете использовать ссылочный тип для взаимодействия с JS .
Как вы можете догадаться здесь, нет способа манипулировать такими сложными типами C ++, как map<string, vector<string>
.
Подводя итог, у меня есть несколько предложений для вас:
- Измените тип ссылки на указатель.
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);
Просто избегайте использования таких сложных типов C / C ++ на стороне JS напрямую или используйте функции получения и установки для
ms
.