我有一些本机C++代码,我正在使用SWIG转换为Java,以便我的Java应用程序可以使用它.特别是有一些函数返回std :: vector.这是我的界面文件的片段:
%include "std_vector.i"
namespace std {
%template(Vector) vector<double>;
%template(Matrix) vector<vector<double> >;
}
%include "std_string.i"
Run Code Online (Sandbox Code Playgroud)
std_string.i而std_vector.i被列入我的,我使用痛饮的构建.我的第一个惊喜是Java输出包含了SWIG的"自有"版本的Vector类(与使用相反java.util.Vector).我真正的问题是从这些函数返回的Vector似乎不起作用.例如,我无法使用get()(有时崩溃程序)或size()返回负值的函数来检索其内容.我知道Vectors包含数据,因为我编写了相同函数的'String'版本,它们只是遍历Vectors(回到本机C++代码中)并以逗号分隔String值返回内容.虽然这是一个有效的解决方法,但最终我希望这能够正常工作,因为我能够接收和操纵Vectors.任何帮助/提示将非常感激.
我尝试用SWIG生成java代码
在MyList.h中,我声明了一个名为_list的自定义列表对象
List<T*> _list;
Run Code Online (Sandbox Code Playgroud)
这个List类继承自vector
class List : public vector<T>
Run Code Online (Sandbox Code Playgroud)
在业务类中(在C++中),我返回一个自定义对象列表
List<MyObject> getMyList(){
....
return list;
}
Run Code Online (Sandbox Code Playgroud)
所以我想生成java代码,我可以在这里检索这个C++ List作为java.util.List或java.util.Vector.
在我的swig.i文件中,我无法管理如何体现
%typemap(jstype) List "java.util.Vector"
namespace std {
%template(CustomVector) vector<MyObject>;
}
Run Code Online (Sandbox Code Playgroud)
任何种类的帮助如何配置此swig.i模板文件或一些示例代码生成java.util.List/Vector返回函数将不胜感激.
谢谢.