我确信对此必须有一个简单的答案,但我在文档中或通过一些初步的谷歌搜索找不到任何参考。
基本上,我有一个看起来像这样的类:
#define NX 65
#define NY 65
class myclass{
// other stuff
public:
//other stuff.. more functions and more variables
// a function I want to call every so often with a few different cases
void solve(int case);
// a 2D double array that I want to access in JS
double ux[NX+1][NY+1];
}
还有其他使用的函数和变量,但它们都不会在 JavaScript 中直接调用。
现在,我想我们 embind 以便我可以创建我的对象并执行以下操作:
x = new Module.myclass();
x.solve(2); // parameter is irrelevant
for (i=0; i<x.ux.length; i++) {
for (j=0; j<x.ux[i].length; j++) {
// do something with the data
console.log(x.ux[i][j]);
}
}
所以,很自然,我会做这样的事情:
EMSCRIPTEN_BINDINGS(myclass) {
class_<myclass>("myclass")
.function("solve", &myclass::solve)
.property("ux", &LBM::getux, &LBM::setux)
;
}
这些是我的吸气剂和二传手
void setux(double uxnew[NX+1][NY+1]) {
for (int i=0; i<NX+1; i++) {
for (int j=0; j<NY+1; j++) {
ux[i][j] = uxnew[i][j];
}
}
};
double getux() { return **ux; };
然后有这些错误:
In file included from ../../lbm.cpp:10:
/home/vagrant/src/emscripten/system/include/emscripten/bind.h:1043:33: error: implicit instantiation of undefined template 'emscripten::internal::GetterPolicy<double (LBM::*)()>'
TypeID<typename GP::ReturnType>::get(),
^
../../lbm.cpp:1264:18: note: in instantiation of function template specialization 'emscripten::class_<LBM, emscripten::internal::NoBaseClass>::property<double (LBM::*)(), void (LBM::*)(double (*)[66])>' requested here
.property("p", &LBM::getp, &LBM::setp)
^
/home/vagrant/src/emscripten/system/include/emscripten/bind.h:428:16: note: template is declared here
struct GetterPolicy;
那么有谁知道如何在 emscripten 中处理双数组?我真的希望我没有错过部分文档。如果我没有,这确实需要包含在嵌入页面中。
另外,我为任何不一致的地方道歉。这不是一个复杂的问题(表面上)。我只是不知道该怎么办。