【问题标题】:JavaCPP ValueGetter vs MemberGetterJavaCPP ValueGetter 与 MemberGetter
【发布时间】:2016-11-04 08:20:20
【问题描述】:

JavaCPP中的@MemberGetter@ValueGetter注解有什么区别?

它们的用例是什么?

我有两个常量的 C 头文件

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

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


更新:

我已经阅读了 JavaCPP Generator 源代码code,做了一些实验,最终以两种方式都这样做了,并且都可以正常工作。这是 java 示例(请参阅我们的 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;
}

【问题讨论】:

    标签: java c java-native-interface javacpp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我在这里看到了@SamuelAudet 的一些回复,例如这篇很酷的帖子stackoverflow.com/a/10809123/3805131 我希望他也能回答这个问题。如果没有,我会更进一步:) 谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多