Używam API C++ innej firmy do mojego projektu i ma funkcje zwracające wartości z typami std::vector<int>
, std::vector<bool>
, std::vector<double>
. Muszę przekazać zmienne z tymi typami do Javy. Używam więc JNI i moja funkcja zwraca wartości z typami jintArray
, jbooleanArray
, jdoubleArray
.Konwertuj podstawowy wektor typu C++ na prymitywny typ tablicy java
Używam następujący kod do konwersji double
typ:
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;
mam żadnego problemu z tego bloku kodu. Ale kiedy chcę to zrobić dla int
i bool
typów pojawia się problem, co następuje:
std::vector<int> data;
//fill data
jint *outArray = &data[0];
i
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
Problem jest z definicji jint
i jboolean
, ponieważ:
typedef long jint;
typedef unsigned char jboolean;
i dla jdouble
:
typedef double jdouble;
Jak widać mój wygodne rozwiązanie dla double
nie działa int
i bool
typów od ich typedefs nie pasują.
Więc moje pytanie brzmi: w jaki sposób mogę to zrobić konwersję wszystkich typów pierwotnych dogodnie?
góry dzięki
Zrobisz fabrykę? – ChiefTwoPencils
Och, co to jest? – guneykayim