Ich verwende eine C++ - API von Drittanbietern für mein Projekt und es hat Funktionen mit Rückgabewerte mit den Typen std::vector<int>
, std::vector<bool>
, std::vector<double>
. Ich muss Variablen mit diesen Typen an Java übergeben. Also verwende ich JNI und meine Funktion hat Rückgabewerte mit den Typen jintArray
, jbooleanArray
, jdoubleArray
.konvertieren C++ primitiven Typ Vektor zu Java primitiven Typ Array
Ich verwende folgenden Code double
Typ zu konvertieren:
std::vector<double> data;
//fill data
jdouble *outArray = &data[0];
jdoubleArray outJNIArray = (*env).NewDoubleArray(data.size()); // allocate
if (NULL == outJNIArray) return NULL;
(*env).SetDoubleArrayRegion(outJNIArray, 0 , data.size(), outArray); // copy
return outJNIArray;
ich kein Problem mit diesem Code-Block haben. Aber wenn ich dies für int
und bool
Arten tun wollen gibt es ein Problem bei der folgenden:
std::vector<int> data;
//fill data
jint *outArray = &data[0];
und
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
Das Problem ist mit Definitionen von jint
und jboolean
, da:
typedef long jint;
typedef unsigned char jboolean;
und für jdouble
:
typedef double jdouble;
Wie können Sie meine bequeme Lösung für double
sehen nicht, da ihre typedefs für int
und bool
Typen funktioniert.
Also, meine Frage ist, wie kann ich diese Konvertierung für alle primitiven Typen tun bequem?
Vielen Dank im Voraus
Fabrik herstellen? – ChiefTwoPencils
Oh, was ist das? – guneykayim