gpt4 book ai didi

javascript - 我怎样才能拥有类型的功能(arr : T[]) => T in C++ that compile to WebAssembly?

转载 作者:行者123 更新时间:2023-11-30 03:28:54 25 4
gpt4 key购买 nike

我想编写一个函数头,它返回具有类型签名的数组的第一个值 (arr: T[]) => T(Typescript 伪代码)。

我的想法是使用 Emscripten 将 C++ 函数编译为 WebAssembly,并在我的 javascript 应用程序中使用这个 head 函数。

我知道 C++ 模板会为这种抽象提供正确的工具,但我想知道模板是否会在编译时运行。

PS:我是C++初学者,欢迎任何资源链接,我想学习。

最佳答案

WebAssembly 本身不支持“泛型”或"template",它只有类型i32i64f32,和 f64

在纯 C++ 中这很好,因为您的编译将只实例化您需要的所有模板特化,然后在 WebAssembly 中使用它们。如果您跨语言进行互操作(比如 WebAssembly 中的 C++ 到 JavaScript 或 TypeScript),那么您可以 explicitly specialize您的模板并将它们从您的 .wasm 文件中导出,以便 JavaScript/TypeScript 可以调用该特化。当然,这意味着您必须预先知道自己需要什么!

有一件事你可以做,但完全不切实际,就是当你弄清楚你实际需要什么模板实例化时,在运行时即时生成 .wasm 文件。这是不切实际的,因为现在还没有工具,你至少需要部分 C++ 编译器在 WebAssembly 中运行,然后你需要在运行时修补你的 WebAssembly.Table(是完全可行的...只是这些天没有积极完成)。

不过,对于您的特定用例(返回数组的第一个元素),我不确定您能做多少!由于 WebAssembly 的类型非常有限,如果您必须作为参数传递,您只能处理适合 32 位或 64 位的内容。即使那样,您的数组也不能只是一般地扩展为参数,因为 WebAssembly 参数计数是在编译时预先确定的(将它们绑定(bind)到 JavaScript 可以在它们上放置/getValue,但您真的不希望那)。你想要的可能是通过 Memory 传递东西,即 similar to dealing with strings (因为字符串是一个字符数组)。

关于javascript - 我怎样才能拥有类型的功能(arr : T[]) => T in C++ that compile to WebAssembly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com