2

@MemberGetter和 和 和有什么不@ValueGetter一样JavaCPP

它们的用例是什么?

我有两个常量的 C 头文件

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

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


更新:

我已经阅读了 JavaCPP Generator 源代码,做了一些实验,最终以两种方式都这样做了,而且两者都在工作。这是 java 示例(有关更多信息,请参阅我们的github 项目)。

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;
}
4

2 回答 2

1

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

于 2016-11-05T04:15:28.290 回答
0

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

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

长话短说:答案是——你需要更加“精力充沛”才能得到答案。

于 2016-11-04T08:35:55.413 回答