在 JavaScript 中,我有一个“线”列表,每条线都由不定数量的“点”组成,每个点都有以下形式[x, y]
。所以它是一个 3D 参差不齐的数组。现在我需要在 emscripten 的帮助下将它传递给我的 C++ 代码(embind https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html)。下面是 C++ 函数的声明:
Eigen::MatrixXd f(const std::vector<std::vector<std::vector<double>>>& lines);
我想得到一个列表的列表([[m11, m12],[m22, m22],...]
) 在 JavaScript 中调用后f
。这种情况下绑定代码怎么写(里面的东西EMSCRIPTEN_BINDINGS
, 例如)?
UPDATE:我现在可以将 JavaScript 数组传递给 C++。绑定部分是这样的
typedef std::vector<double> Point;
typedef std::vector<Point> Line;
EMSCRIPTEN_BINDINGS(module) {
register_vector<Line>("LineArray");
register_vector<Point>("Line");
register_vector<double>("Point");
emscripten::function("f_wrapper", &f_wrapper);
}
where f_wrapper
calls f
但返回vector<vector<double>>
代替MatrixXd
。现在的问题是我调用后只能得到一个空的JavaScript对象f_wrapper
。 JavaScript 是
var Module = require('./bind.js'); // the output of em++
var cppAllLines = new Module.LineArray();
// some initialization
var result = Module.f_wrapper(cppAllLines); // an empty "Line" object
有任何想法吗?