これには簡単な答えがあるに違いないと確信していますが、ドキュメントやいくつかの最初のグーグル検索で参照を見つけることができませんでした.
基本的に、次のようなクラスがあります。
#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 で直接呼び出されるものはありません。
ここで、オブジェクトを作成して次のようなことができるように、組み込みたいと思います。
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で二重配列を処理する方法を知っている人はいますか? ドキュメントの一部を見逃していなかったことを本当に願っています。私がそうしなかった場合、これは組み込みページに含める必要があります。
また、不手際がありましたことをお詫び申し上げます。それは(表面的には)複雑な問題ではありません。どうすればいいのかわからない。