Обработка параметров `const float *` в c ++ при генерации прокси-классов Java через SWIG? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь обернуть проект c ++ в Java, используя SWIG v4, но у меня возникают проблемы с некоторыми параметрами метода.В рамках проекта 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;
    }
};

}

Когда классы прокси Java генерируются SWIG, я хотел бы иметь способ работы с методами, использующими этот тип ввода указателя, которыйестественно для Java.До сих пор моя стратегия заключалась в том, чтобы использовать файл std_vector.i, чтобы определить шаблон FloatVector для std::vector<float>, а затем предоставить несколько таблиц типов, которые позволяют использовать прокси-класс FloatVector на стороне Java и принимать в качестве входных данных.когда прошло через оболочку JNI на родную сторону.Тем не менее, я не смог создать правильные карты типов, которые позволили бы мне достичь желаемого результата.

Я ищу лучший способ справиться с const float * входными параметрами в методах c ++, ожидая std::vector<float>::data какаргументы при попытке создать прокси-классы Java и оболочки JNI.

...