Я пытаюсь обернуть проект 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.