У меня есть собственный код на С++, который я конвертирую в Java с помощью SWIG, чтобы мое приложение Java могло его использовать. В частности, есть некоторые функции, которые возвращают std::vector. Вот фрагмент моего файла интерфейса:
%include "std_vector.i"
namespace std {
%template(Vector) vector<double>;
%template(Matrix) vector<vector<double> >;
}
%include "std_string.i"
std_string.i
и std_vector.i
были включены в мою сборку SWIG, которую я использую. Моей первой неожиданностью было то, что выход Java включал "собственную" версию SWIG класса Vector (в отличие от использования java.util.Vector
). Моя реальная проблема заключается в том, что векторы, которые возвращаются из этих функций, похоже, не работают. Например, я не могу получить их содержимое, используя get()
(иногда сбой программы) или функцию size()
, возвращающую отрицательные значения. Я знаю, что Vector
содержит данные, потому что я закодировал версии "String" тех же функций, которые просто перебирают через Vector
(обратно в собственный код на С++) и возвращают содержимое в значении String
, разделенном запятыми. Хотя это допустимое решение проблемы, в конечном счете, мне бы хотелось, чтобы это правильно работало, и я мог получать и манипулировать Vectors
. Любые советы/подсказки будут очень оценены.