Javaには、インターフェースがあります:
public interface I {...}
関数の宣言void f()、およびいくつかのクラス:
public class A implements I {...}
public class B implements I {...}
public class C implements I {...}
...
私はしばしばネイティブ関数を呼び出します:
public native void nativeFunc(I obj);
C++ では、
jobject jobj
呼ぶのが目的
jobj.f();
チェーンを毎回通過することなく
cls = jenv->GetObjectClass(jobj); (1)
mid = jenv->GetMethodID(cls, "f", "()V"); (2)
jenv->CallVoidMethod(jobj, mid); (3)
midネイティブ呼び出し間でキャッシュできないようです。別の提案として、行 (1) から始めて、 cached を使用することもできmap <jclass, jmethodID>ます。ただし、jclass同じクラスでも参照が異なる可能性があるため、これもおそらく機能しません。
最適化ソリューションはありますか?