JavaCPP ValueGetter 与 MemberGetter

JavaCPP ValueGetter vs MemberGetter

@MemberGetter and @ValueGetter annotations in JavaCPP有什么区别?

它们的用例是什么?

我有两个常量的 C 头文件

static const int TRANSPOSE = 0;
static const int NO_TRANSPOSE = 1;

在 Java 端获取它们的值的首选方法是什么?


更新:

我已阅读 JavaCPP 生成器源代码 code, done some experiments and ended up doing this in both ways and both are working. Here's java sample (see our github project 了解更多)。

private static native @MemberGetter @Const int TRANSPOSE();
private static native @ValueGetter @Const int NO_TRANSPOSE();

但我还是不知道有什么区别。两个注释都生成了相同的 C++ 代码。

JNIEXPORT jint JNICALL Java_com_rtbhouse_model_natives_NeuralNetworkNativeOps_TRANSPOSE(JNIEnv* env, jclass cls) {
    jint rarg = 0;
    const int rvalue = (const int)TRANSPOSE;
    rarg = (jint)rvalue;
    return rarg;
}

JNIEXPORT jint JNICALL Java_com_rtbhouse_model_natives_NeuralNetworkNativeOps_NO_1TRANSPOSE(JNIEnv* env, jclass cls) {
    jint rarg = 0;
    const int rvalue = (const int)NO_TRANSPOSE;
    rarg = (jint)rvalue;
    return rarg;
}

这似乎是一个比较小的开源项目。我不希望您在这里询问此类问题时会得到很多反馈。因此,帮助您解决问题的答案是:使用不同的研究策略:

  1. 首先是开源。只需转到 github 并克隆该存储库并开始使用它。阅读源代码,搜索那些注释,并尝试是否可以找到它们的用法。
  2. 只需联系该产品周围的社区即可;最简单的方法...只需写一封电子邮件到 JavaCPP 的主要 contributor

长话短说:答案是 - 您需要更多 "energetic" 才能得到答案。

对于全局变量和宏,没有太大区别。在 类 的情况下,一对本机 get()put() 方法默认值 getter 和 setter,映射到 []指针的运算符,通常用于访问数组的元素。其他 getter 和 setter 对用于访问字段,如 native int n(); native void n(int n) 默认是成员变量 getter 和 setter 成员变量 int n@ValueGetter@ValueSetter@MemberGetter@MemberSetter@Function 注释可用于更改默认行为并为方法使用其他名称。