C++ 如何返回向量<;向量<;浮动>&燃气轮机;来自JNI?

C++ 如何返回向量<;向量<;浮动>&燃气轮机;来自JNI?,c++,java-native-interface,C++,Java Native Interface,我有一个C++函数: std::vector const&GetVertices(){返回m_顶点;} 我需要通过JNI将这个值返回给Java 因此,由于我需要返回vector的vector,我认为我必须使用jobjectArray,如下所示: extern“C”JNIEXPORT作业对象数组JNICALL Java\u com\u google\u ar\u核心\u示例_ java\u helloar\u helloar活动\u数据填充列表( JNIEnv*env, jobject/*此*/

我有一个C++函数:

std::vector const&GetVertices(){返回m_顶点;}
我需要通过JNI将这个值返回给Java

因此,由于我需要返回
vector
vector
,我认为我必须使用
jobjectArray
,如下所示:

extern“C”JNIEXPORT作业对象数组JNICALL
Java\u com\u google\u ar\u核心\u示例_
java\u helloar\u helloar活动\u数据填充列表(
JNIEnv*env,
jobject/*此*/
) 
在Java中,我有以下方法:

公共本机对象[]fillListWithData();
那么,我的问题是,如何将
向量
转换为
作业对象数组

我知道有一种方法可以创建
jobjectArray

jobjectArray-verticesArr=env->NewObjectArray(verticesVec.size(),这里应该是什么类?,NULL);
那么我如何输入这些值呢

全类实现

extern“C”JNIEXPORT作业对象数组JNICALL
Java\u com\u google\u ar\u核心\u示例\u Java_
helloar\u helloar活动\u用数据填充列表(
JNIEnv*env,
jobject/*此*/
) {
//verticesVec
vector verticesVec=初始值设定项->GetVertices();//我需要将此向量转换为JOBJECTARRAY
jobjectArray verticesArr=env->NewObjectArray(verticesVec.size(),这里应该是什么类?NULL);
//如何在这里填充数组??
返回垂直搜索;
}

取决于您希望如何在Java中操作数据,例如添加更多元素?你没有提到这一点,所以答案再具体不过了。但也许您需要“java/util/ArrayList”的float

以下答案应为您指明正确的方向:

对于其他类型的列表,代码看起来类似。一点网络搜索将提供几种解决方案


如果速度(CPU/延迟)和数据量不重要,我通常建议您将数据序列化为JSON并以字符串形式返回,而不是对Java数据结构进行所有混乱的处理。例如,使用简单的方法将C++对象数据类型(包括对象)序列化到JSON,java上有几个反序列化的包(Web搜索又一次),许多java框架都是用内置工具来实现的。

您必须玩<代码> java。这样,您就可以对

(C++ side) vector<vector<float> >  --->  Vector<Vector<Float>> (Java side)
您可以在此处找到完整的示例代码:

运行测试后,您可以看到基于
C++
的数据被传递到
Java

> make test
/Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home/bin/java -Djava.library.path=:./lib -cp target recipeNo045.VectorOfVectors
library: :./lib
[1.1,1.2,1.3]
[2.1,2.2,2.3]
[3.1,3.2,3.3]
和的可能副本
> make test
/Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home/bin/java -Djava.library.path=:./lib -cp target recipeNo045.VectorOfVectors
library: :./lib
[1.1,1.2,1.3]
[2.1,2.2,2.3]
[3.1,3.2,3.3]