swigjavac++;传递包含c++;结构
我一直在看相关的问题,我无法摆脱swig指针 基本上我有一个简单的结构swigjavac++;传递包含c++;结构,java,c++,stl,vector,swig,Java,C++,Stl,Vector,Swig,我一直在看相关的问题,我无法摆脱swig指针 基本上我有一个简单的结构 typedef struct mbuf{ int date int time } 在我的课堂上,我定义了一个向量的向量 class Profile { private: std::vector<std::vector<mbuf> > mbufArray; std::vector<std::vector<mbuf> > getMbufArray() c
typedef struct mbuf{
int date
int time
}
在我的课堂上,我定义了一个向量的向量
class Profile {
private:
std::vector<std::vector<mbuf> > mbufArray;
std::vector<std::vector<mbuf> > getMbufArray() const {
return mbufArray;
}
void setMbufArray(std::vector<std::vector<mbuf> > mbufArray) {
this->mbufArray = mbufArray;
}
}
类配置文件{
私人:
std::向量射线;
std::vector getMbufArray()常量{
返波;
}
void setMbufArray(标准::向量mbufArray){
此->mbufArray=mbufArray;
}
}
get和set函数已经为我自动生成。
我已经使用其他问题的信息生成了swigjava类
%{
define SWIG_JAVA_EXTRA_NATIVE_CONTAINERS
%}
%include "std_vector.i"
%{
include <vector>
%}
%template(ProfileVector) std::vector<std::vector<mbuf> >;
%typemap(out) std::vector<std::vector<mbuf> >::value_type {
$result = SWIG_NewPointerObj(SWIG_as_voidptr(&$1), $descriptor(std::vector<mbuf>), 0 | 0 );
}
%typemap(out) std::vector<std::vector<mbuf> >::value_type & {
$result = SWIG_NewPointerObj(SWIG_as_voidptr($1), $descriptor(std::vector<mbuf>), 0 | 0 );
}
%{
定义SWIG_JAVA_EXTRA_NATIVE_容器
%}
%包括“标准向量i”
%{
包括
%}
%模板(ProfileVector)std::vector;
%typemap(out)std::vector::value_type{
$result=SWIG_NewPointerObj(SWIG_as_voidptr(&$1),$descriptor(std::vector),0 | 0);
}
%typemap(out)std::vector::value\u type&{
$result=SWIG_NewPointerObj(SWIG_as_voidptr($1),$descriptor(std::vector),0 | 0);
}
我的问题是,对于我的set和get类型,我仍然收到SWIGTYPE_p_std__vecort_mbuf_,我可以创建函数来提供元素,但我真正需要的是更自然地访问java中的向量元素
任何帮助都将不胜感激。好的,我发现我缺少了实际向量的typedef 现在,通过将该行添加到.I文件中,我可以访问mbuf类型
%template(ProfileVector) std::vector<mbuf>;
%template(VectorProfileVector) std::vector<std::vector<mbuf> >;
%模板(ProfileVector)std::vector;
%模板(VectorProfileVector)std::vector;
如果你想从java中自然地访问向量或向量,我建议你自己用C++或java编写或者更详细的写代码。就我个人而言,我会用Java编写整个程序。