gpt4 book ai didi

c++ - 如何将 C++ 类编译为 wasmer 的 .wasm 文件?

转载 作者:行者123 更新时间:2023-12-05 04:33:18 24 4
gpt4 key购买 nike

我正在尝试将一个 C++ 库(纯代码)编译为一个 .wasm 文件,用于 Wasmer 这样我就可以在服务器端普遍运行它们,而不管是什么操作系统已启动。但是,我发现很少有文档可以帮助我处理 C++ 类。

有关详细信息,我想要的所有有用函数都在名为 Timer 的 C++ 类中,例如 Timer.reset()。但似乎 Wasmer 只能在其文档中使用 exported functions。那么可以在 Wasmer 中使用导出的 C++ 类,如 instance.exports.Timer.reset() 吗?

主要的困惑还在于如何将这个 Timer 类包装在 .wasm 文件中。我检查了显示 this 的 emscripten 文档.但是文档将它们编译为 .js 文件而不是 .wasm

结合以上问题,我发现很难弄清楚将 Wasmer 中的 c++ 类用于其他编程语言的过程。

我希望我已经为愿意提供一些提示的任何人做出了明确的问题解释。最佳。

最佳答案

检查以下拉取请求:Enable accessing fields that are classes without copying .

使用它,您可以使用以下示例(来自 PR)将 C++ 类公开为属性:

class Foo {
public:
int i;
};

class MyClass {
public:
int x;
Foo foo;
int getY() const { return y; }
void setY(int y_) { y = y_; }
private:
int y;
};

EMSCRIPTEN_BINDINGS(test) {
class_<MyClass>("MyClass")
.constructor()
.property("x", &MyClass::x) // Expose a field directly.
.property("y", &MyClass::getY, &MyClass::setY) // Expose through a getter and setter.
.property("readOnlyY", &MyClass::getY) // Expose a read only property.
.property("foo", &MyClass::foo); // Expose a class field.
class_<Foo>("Foo")
.constructor()
.property("i", &Foo::i);
}

然后在Javascript中,你可以使用下面的代码来使用它们:

var myClass = new Module.MyClass();
myClass.x = 10;
myClass.x; // 10
myClass.y = 20;
myClass.y; // 20
myClass.readOnlyY; // 20
// Assign directly to the inner class.
myClass.foo.i = 30;
myClass.foo.i; // 30
// Or use Foo object to assign to foo.
var foo = new Module.Foo();
foo.i = 40;
// Note: this will copy values from the foo but the objects will remain separate.
myClass.foo = foo;
myClass.foo.i; // 40
myClass.delete();
foo.delete();

关于c++ - 如何将 C++ 类编译为 wasmer 的 .wasm 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71462530/

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