如何连接JavaScript(不规则)数组和std::vector<;标准::向量<;T>&燃气轮机;对象
在JavaScript中,我有一个“行”列表,每个行由不确定数量的“点”组成,每个点的形式为如何连接JavaScript(不规则)数组和std::vector<;标准::向量<;T>&燃气轮机;对象,javascript,c++,eigen,emscripten,Javascript,C++,Eigen,Emscripten,在JavaScript中,我有一个“行”列表,每个行由不确定数量的“点”组成,每个点的形式为[x,y]。所以它是一个3D粗糙阵列。现在我需要通过ESPRONTEN()的帮助将它传递给我的C++代码。下面是C++函数的声明: Eigen::MatrixXd f(const std::vector<std::vector<std::vector<double>>>& lines); 其中f_包装器调用f但返回vector而不是MatrixXd。现在的问题
[x,y]
。所以它是一个3D粗糙阵列。现在我需要通过ESPRONTEN()的帮助将它传递给我的C++代码。下面是C++函数的声明:
Eigen::MatrixXd f(const std::vector<std::vector<std::vector<double>>>& lines);
其中f_包装器
调用f
但返回vector
而不是MatrixXd
。现在的问题是,在调用f\u wrapper
之后,我只能得到一个空的JavaScript对象。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
有什么想法吗?
< P>当从C++函数传递一个Envin向量时,例如std::vector<std::vector<double>> f_wrapper(...);
result
对象不是实现length
属性或数组索引访问的Javascript数组,因此如果使用这些属性访问其数据,它可能会显示为“空”
但是它确实公开了get
和size
函数来访问向量:
console.log('Back from C++', result.size(), result.get(0).get(1));
(双get
是因为我们返回了一个向量向量)
为了完整性,查看返回的对象的原型,它似乎公开了以下函数
get
向后推
调整大小
set
size
稍微不一致的是它暴露了<>代码> GET和
result.length
或result[0]
等值,但未发现任何定义。我应该查看emscripten/bind.h
以了解register\u vector
的真正作用。现在我可以正常访问内容了。如果你能把评论写进一个答案,我愿意接受。非常感谢。它是否自动管理解除分配?它能在没有内存泄漏的情况下工作吗?@Sohail我的怀疑是肯定的,但这可能值得一个单独的问题。get,push_back函数的文档在哪里?你是如何找到myVector的get函数的?请发一个链接thnx@BuddhikaChaturanga我想我没有在任何文档中找到它,我在浏览器的控制台中检查了返回的对象。@MichalCharemza Thanx bro以获得回复!!我试图在这些方法上找到任何emscripten引用或文档,但没有找到。这就是我问的原因。
var result = Module.f_wrapper(...);
console.log('Back from C++', result.size(), result.get(0).get(1));