Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接JavaScript(不规则)数组和std::vector<;标准::向量<;T>&燃气轮机;对象_Javascript_C++_Eigen_Emscripten - Fatal编程技术网

如何连接JavaScript(不规则)数组和std::vector<;标准::向量<;T>&燃气轮机;对象

如何连接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。现在的问题

在JavaScript中,我有一个“行”列表,每个行由不确定数量的“点”组成,每个点的形式为
[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和 SET函数,而不是等价于C++函数。我怀疑完全等效的函数不可能实现,因为返回的引用允许它用作setter,这在Javascript中是不可能的。

@AviGinsburg正好相反。你能解释一下为什么说“空”行对象吗?基于您的代码,我刚刚创建了一个小测试,将JavaScript中的线性函数传递给C++函数,它返回一条回线,并且通信似乎双向工作。我使用的是Emscripten 1.35.23-64位。还有@MichalCharemza啊哈!我将其视为JavaScript数组,因此检查了
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));