2014-06-05 4 views
6

제 프로젝트에 제 3 자 C++ API를 사용하고 있으며 반환 값이 std::vector<int>, std::vector<bool>, std::vector<double> 인 함수가 있습니다. Java에 이러한 유형의 변수를 전달해야합니다. 그래서 JNI를 사용하고 있습니다. 함수의 반환 값은 jintArray, jbooleanArray, jdoubleArray입니다. 이 코드 블록과 아무 문제도 없어C++ 원시 타입 벡터를 Java 원시 타입 배열로 변환

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; 

:

나는 double 형식을 변환하는 다음 코드를 사용하고 있습니다. 내가 intbool 유형에 대해이 작업을 수행 할 때의 문제가 다음

보낸 사람

std::vector<int> data; 
//fill data 
jint *outArray = &data[0]; 

std::vector<bool> data; 
//fill data 
jboolean *outArray = &data[0]; 

문제는 jintjboolean의 정의와입니다,

typedef long   jint; 
typedef unsigned char jboolean; 

jdouble :

,210
typedef double   jdouble; 

으로, 당신은 double 내 편리한 솔루션이 일치하지 않는 자신의 typedef 이후 intbool 유형에 대해 작동하지 않습니다 볼 수 있습니다.

그래서, 내 질문에 내가 모든 원시 유형의 편리 이 변환을 수행 할 수있는 방법인가? 데이터 유형부터 사전

+0

공장 초기화? – ChiefTwoPencils

+0

오, 그게 뭐죠? – guneykayim

답변

2

에서

덕분에 당신은 벡터를 복사해야 다른 크기가있을 수 있습니다. 이 작업을 수행하는 가장 간단한 방법은 물론,

std::vector<jboolean> tmp(data.begin(), data.end()); 
jboolean *outArray = &tmp[0]; 

당신은 jBooleanArray을 할당하고 for 루프의 요소를 설정하거나 STL 컨테이너처럼 동작 그것의 래퍼를 작성할 수 있습니다.

관련 문제