Java C ++ Wrapper для Android: как обернуть шаблоны C ++ - PullRequest
1 голос
/ 17 сентября 2011

Я работаю над проектом Android (3D-приложение реального времени) и хотел бы использовать библиотеку C ++, которую я написал.Так как он опирается на шаблоны, я ищу хорошее решение для написания Java-оболочки вокруг него.

Одна из моих идей заключалась в том, чтобы включить имя класса java в вызов JNI при создании объекта.Например, я создаю экземпляр класса Java следующим образом:

//java
A a = new A(Integer.class());


//jni call
if(strcmp("java.lang.integer", className) == 0) return (jlong) new A<int>(); 
else if(strcmp("java.lang.float", className) == 0) return (jlong) new A<float>(); 
else if( .... )

Проблема этого решения заключается в том, что всякий раз, когда я хочу использовать новый тип данных, мне нужно добавить еще один блок кода elseif и снова скомпилировать код c ++,

1 Ответ

1 голос
/ 17 сентября 2011

Проблема с этим решением состоит в том, что всякий раз, когда я хочу использовать новый тип данных, я должен добавить еще один блок кода elseif.

Помните, что в Java есть только 8 примитивных типов. Если вы добавите один if-else для каждого из них, вы сможете обработать любой аргумент примитивного типа.

Если вы также добавите регистр для jobject, вы также можете использовать его для обработки любого типа объекта. Просто будьте осторожны с правильной обработкой ссылок на объекты JNI.

...