私はこれを見たことがありませんでした(または、おそらく私はそれを見ていないシンプルなjsutです)ですが、JNIを使用してc/C++オブジェクトを返し、そのオブジェクトをJavaで使用する方法はありますか?例えばJNIを使用してJavaコード内のC++オブジェクトを参照できますか?
(非常にシンプル):私はのようなものをやって行くだろうか、私のJavaコードでは、
class simpleClass{
...
private:
int intVar;
public:
int getIntVar();
void setIntVar(int someNum);
...
}
:
...
simpleClass sc = new simpleClass();
sc.setIntVar(9);
System.out.println(sc.getIntVar());
...
私はこれは非常に単純化した例である実現が、私は」私はちょうどコンセプトを探しています - 私はC++であることを念頭に置いているクラスは非常に大きく、ラッパーメソッドのトーンを作成することを避けるために探しています...
それはうまくいかない場合は、あなたのコードを保存する数日を節約する
テンプレートはC++でコンパイルされているので、C++テンプレートはこの質問とは無関係です。 JNIは、これらのテンプレートからインスタンス化されたクラスをサポートする必要があります。これは通常のクラスと変わりません。 –
@ダンヘッダーのみのテンプレートクラスを記述している場合、クライアントコードで新しいバージョンのクラスをインスタンス化するようにコンパイラに指示する必要があります。したがって、コンパイラはテンプレートについても知っておく必要があります標準で要求されているかどうかは考えられませんが、現実にはこれを行う必要はありませんでした)。 – Voo
@Vooインスタンス化を生成するには、コンパイル時にテンプレートの定義が必要です。使用される必要な型ごとに生成されると、オブジェクトコードはそれぞれの型のクラスを書き出したかのようになります。 AFAIKにcppファイルを含めないと、同じ理由で定義が完全にインラインでない限り、翻訳単位にないテンプレートは参照できません。 – AJG85