2014-06-05 34 views
6

Projem için üçüncü taraf C++ API kullanıyorum ve std::vector<int>, std::vector<bool>, std::vector<double> türlerine sahip döndürme değerleriyle işlevleri var. Bu tür değişkenleri Java'ya aktarmam gerekiyor. Bu yüzden JNI kullanıyorum ve işlevimin jintArray, jbooleanArray, jdoubleArray türleriyle dönüş değerleri var. Bu kod bloğu ile bir sorunum varC++ ilkel türünü java ilkel tür dizisine dönüştürün

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; 

:

Ben double türünü dönüştürmek için aşağıdaki kodu kullanıyorum. Ben int ve bool türleri için bunu yapmak istediğinizde Fakat bir sorun var şu:

: beri

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

ve

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

sorun jint ve jboolean tanımları ile,

typedef long   jint; 
typedef unsigned char jboolean; 

ve jdouble için:

typedef double   jdouble; 

olarak, double benim elverişli çözüm uymuyor onların typedefs beri int ve bool türleri için çalışmaz görebilirsiniz.

Yani, benim sorum ben tüm ilkel tipleri rahatlıkla için bu dönüşümü yapabiliriz nasıl? veri türleri yana peşin

+0

Fabrika yap? – ChiefTwoPencils

+0

Oh, bu nedir? – guneykayim

cevap

2

yılında

teşekkürler vektör kopyalamak zorunda farklı boyutlarda olabilir. Bunu yapmanın en kolay yolu, elbette

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

size jBooleanArray tahsis ve döngü için elemanlarını ayarlamak veya bir STL konteyner gibi davranır bunun için bir sarmalayıcı yazabilir.

İlgili konular