如何在 Enscripten 中返回未知大小的数组
How to return an array of unknown size in Enscripten?
>我有一个 C/C++ 函数,它返回两个数组,每个数组的大小在调用前未知。我需要从 JavaScript 调用这个函数。(为简单起见,示例中返回一个数组)。
extern "C" {
void produce_object_3d(float* verts, int *num_verts);
}
请注意,JavaScript 不知道std::vector
、boost:array
和其他类型。我目前预先分配了一些空间,但它不起作用。下面是 JavaScript 端的代码:
var verts_address = Module._malloc(FLOAT_SIZE*3*max_verts);
var nv_address = Module._malloc(INT_SIZE*1);
//
produce_object_3d (verts_address, nv_address);
//
var nverts = Module.HEAPU32[nv_address/INT_SIZE];
var verts = Module.HEAPF32.subarray(verts_address/FLOAT_SIZE, verts_address/FLOAT_SIZE + 3*nverts);
这是没有效率的。另外,如果结果的大小很大并且没有足够的内存预分配怎么办?
对于您的特定情况,使用 embind 是更好的选择。根据官方文档
为方便起见,embind 提供了注册的工厂函数 std::vector (register_vector()) 和 std::map (register_map()) 类型:
EMSCRIPTEN_BINDINGS(stl_wrappers) { register_vector<int>("VectorInt"); register_map<int,int>("MapIntInt"); }
返回的对象具有 .get() 和 .size() 等方法。
相关文章:
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- C++中数组大小未知的指针转换
- 如何定义在编译时数据未知的 const 数组
- 在C++中初始化第一维大小未知的二维数组
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 你能让数组中的项数未知吗
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何将输入到具有未知数量元素的数组中?
- 获取由空格分隔的未知大小的单行输入,并将其存储到整数数组中
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 未知容器、向量或数组 c++ 的大小
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 构造函数初始化器列表中未知长度的数组
- 在 c++ 中使用未知元素初始化的字符数组
- 特征:将数组映射到矩阵大小未知的矩阵
- 如何声明一个未知大小的数组,然后输入直到我想要,然后获取数组的大小
- 如何在 C++ 中将值附加到未知大小的数组中
- 如何确定未知类型数组的索引是否为空
- 使用数组和布尔值在输出未知时从输出中删除逗号
- 如何正确写入多维字符数组未知数量的值,但固定的字符堆