В JavaScript у меня есть список «строк», каждая из которых состоит из неопределенного количества «точек», каждая из которых имеет форму [x, y]
. Итак, это трехмерный рваный массив. Теперь мне нужно передать его в мой код C++ с помощью emscripten (вставить). Вот объявление функции C++:
Eigen::MatrixXd f(const std::vector<std::vector<std::vector<double>>>& lines);
И я хотел бы получить список списков ([[m11, m12],[m22, m22],...]
) в JavaScript после вызова f
. Как написать код привязки в этом случае (например, внутри EMSCRIPTEN_BINDINGS
)?
ОБНОВЛЕНИЕ: теперь я могу передать массив 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);
}
где f_wrapper
вызывает 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
Любые идеи?
result.length
илиresult[0]
, но не нашел ничего определенного. Я должен был заглянуть вemscripten/bind.h
, чтобы узнать, что на самом деле делаетregister_vector
. Теперь я могу нормально посещать контент. Если вы можете написать комментарий в ответ, я хотел бы принять его. Благодарю вас! - person ziyuang   schedule 23.02.2016