我正在尝试使用SWIG v4在Java中包装一个c ++项目,但是在处理某些方法参数时遇到了麻烦。在项目中,const float *
经常被用作输入参数类型。此指针类型用于指向来自std::vector<float>
对象的数据(即,调用std::vector::data
的结果)。
这是一个示例c ++头文件example.h
,它提供了我正在使用的c ++代码的简化版本:
#include <vector>
namespace example {
struct Index {
int dimension;
int numVectors;
std::vector<float> vectors;
explicit Index(long d = 0):
dimension(d),
numVectors(0) {}
void add (int n, const float *x) {
vectors.insert(vectors.end(), x, x + n * dimension);
numVectors += n;
}
};
}
当SWIG生成Java代理类时,我希望有一种方法来处理使用Java固有的这种指针输入类型的方法。到目前为止,我的策略是使用std_vector.i
文件为FloatVector
定义std::vector<float>
模板,然后提供几个允许使用此FloatVector
代理类的类型映射在Java端,并在通过JNI包装器传递到本机端时被接受为输入。但是,我一直无法编写正确的类型图来实现所需的结果。
我正在寻找在试图生成Java代理类和JNI包装器时期望使用const float *
作为参数的c ++方法中处理std::vector<float>::data
输入参数的最佳方法。