У меня есть собственный код на С++, который я конвертирую в 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. Любые советы/подсказки будут очень оценены.