2011-09-16 11 views
1

私はアンドロイドプロジェクト(3Dリアルタイムアプリケーション)に取り組んでおり、私が作成したC++ライブラリを使用したいと考えています。それはテンプレートに依存しているので、私はそれの周りにJavaラッパーを書くための良い解決策を探しています。Android用Java C++ラッパー:C++テンプレートをラップする方法

私が持っていた考えの1つは、オブジェクトを作成するときにJNI呼び出しにJavaクラス名を含めることでした。たとえば、私はこのような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

このソリューションの問題点は、新しいデータ型を使用するたびに、別のelseifコードブロックを追加する必要があることです。

Javaには8種類しかありません。それらのそれぞれに対してif-elseを追加すると、任意のプリミティブ型の引数を扱うことができます。

jobjectのケースも追加すると、のオブジェクトタイプを処理することもできます。 JNIオブジェクトの参照を正しく処理するように注意してください。

+0

オブジェクトにelseifを追加するだけの場合、対応するC++クラスのインスタンスを作成するにはどうすればよいですか? – Pedro

関連する問題