Sto utilizzando un'API C++ di terze parti per il mio progetto e ha funzioni con valori di ritorno con tipi std::vector<int>
, std::vector<bool>
, std::vector<double>
. Ho bisogno di passare variabili con questi tipi a Java. Quindi sto usando JNI e la mia funzione ha valori di ritorno con i tipi jintArray
, jbooleanArray
, jdoubleArray
.convertire il vettore di tipo primitivo C++ nell'array primitivo di tipo java
sto usando seguente codice per convertire double
Tipo:
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;
Non ho alcun problema con questo blocco di codice. Ma quando voglio fare questo per int
e bool
tipi c'è un problema al seguente:
std::vector<int> data;
//fill data
jint *outArray = &data[0];
e
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
Il problema è con le definizioni di jint
e jboolean
, dal momento che:
typedef long jint;
typedef unsigned char jboolean;
e per jdouble
:
typedef double jdouble;
Come, si può vedere la mia soluzione conveniente per double
non funziona per int
e bool
tipi in quanto i loro typedef non corrisponde.
Quindi, la mia domanda è come posso fare questa conversione per tutti i tipi primitivi comodamente?
Grazie in anticipo
Fabbrica una fabbrica? – ChiefTwoPencils
Oh, che cos'è? – guneykayim