如何在 WebAssembly 中使用(C++ STL 的)向量

Posted

技术标签:

【中文标题】如何在 WebAssembly 中使用(C++ STL 的)向量【英文标题】:How to use vectors (of C++ STL) with WebAssembly 【发布时间】:2018-05-07 19:14:13 【问题描述】:
#include <iostream>
#include<vector>
using namespace std;

vector<int> ver;

int pushData(int n)

    for(int i=0;i<n;i++)
    
        ver.push_back(i);
    

我想从 JS 调用 pushData 函数并将一些数据推送到向量“ver”并稍后使用它。 请解释如何使用 WebAssembly 做到这一点。

【问题讨论】:

【参考方案1】:

我正在做和你一样的事情。在我看来,在 WASM 中使用 STL 非常困难。

我的解决方案是创建一个模拟向量。Wasm 只支持 int32、int64、float32 和 float64,并且 wasm 的地址与其他进程不同。所以直接导入库是不可行的。可以通过代理或转换调用库函数,也可以自己写。

在这种情况下,vector不能直接导入。可以创建一个名为vector的类,并实现push_back函数。

class vector
public:
    bool push_back(int i)
       // do something
    
    int& at(uint index)
       // do something
    
private:
    int* int_ptr;

更多细节在这里 https://aransentin.github.io/cwasm/

【讨论】:

以上是关于如何在 WebAssembly 中使用(C++ STL 的)向量的主要内容,如果未能解决你的问题,请参考以下文章

基础为零?如何将 C++ 编译成 WebAssembly

十年磨一剑,WebAssembly 是如何诞生的?

如何在使用 WebAssembly 进行大量计算时保持反应式 UI?

如何在 qt webassembly 中使用 SQLITE

14行JavaScript教你使用WebAssembly

EOS开发入门之WebAssembly