2016-11-04 64 views
2

@MemberGetter@ValueGetter注解在JavaCPP有什么区别?JavaCPP ValueGetter vs MemberGetter

他们的用例是什么?

我有两个常量

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

什么是prefferred方式在Java方面得到他们的价值观的C头文件?


UPDATE:

我读过JavaCPP生成源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; 
} 

回答

1

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

0

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

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

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

+0

我在这里看到了@SamuelAudet的一些回复,例如这个很酷的帖子http://stackoverflow.com/a/10809123/3805131 我希望他也回答这个问题。如果没有,我会更进一步:)谢谢。 – tworec

相关问题