通过SWIG生成Java代理类时,如何在C ++中处理`const float *`参数?

时间:2018-12-10 16:22:22

标签: java c++ swig

我正在尝试使用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输入参数的最佳方法。

0 个答案:

没有答案