适用于 Android 的 Java C++ 包装器 : how to wrap c++ templates

标签 java android c++ templates wrapper

我正在开发一个 android 项目(一个 3d 实时应用程序)并且想使用我编写的 c++ 库。因为它依赖于模板,所以我正在寻找一个很好的解决方案来围绕它编写 Java 包装器。

我的一个想法是在创建对象时在 JNI 调用中包含 java 类名。例如,我像这样实例化一个 Java 类:

//java
A a = new A(Integer.class());


//jni call
if(strcmp("java.lang.integer", className) == 0) return (jlong) new A<int>(); 
else if(strcmp("java.lang.float", className) == 0) return (jlong) new A<float>(); 
else if( .... )

这个解决方案的问题是,每当我想使用新的数据类型时,我都必须添加另一个 elseif 代码块并再次编译 C++ 代码。

最佳答案

The problem with this solution is, that whenever I want to use a new data type I have to add another elseif code block.

请记住,Java 中只有 8 种原始类型。如果您为其中每一个添加一个 if-else,您将能够处理任何基本类型参​​数。

如果您还为 jobject 添加了一个案例,您还可以使用它来处理任何 对象类型。请小心正确处理 JNI 对象引用。

关于适用于 Android 的 Java C++ 包装器 : how to wrap c++ templates ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451025/

相关文章:

Java Spring : What is best way to do a mysql query using an IN clause using JdbcTemplates?

java - eclipse中的gwt/gson,错误: "Unable to invoke no-args constructor for class"

java - JNA 无效的内存访问

android - 如何在几秒钟内转移到另一个 Activity ?

android - 如何验证EditText?

c++ - MFC C++ 应用程序的最佳 XML 序列化库

c++ - 如何运行示例 Armadillo 程序

java - 如何在安全 xml 中配置 BCryptPasswordEncoder

android - 使用Qt For Android时如何让Android键盘出现?

c++ - var++ 和 var-- 不是线程安全的?