java c++传递一个包含c++结构的向量的向量

Swig java c ++ passing a vector of vectors containing a c++ structure

本文关键字:向量 c++ 一个 包含 结构 java      更新时间:2023-10-16

我一直在寻找相关问题,但我无法摆脱swig指针。

基本上我有一个简单的结构

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;
    }
}

get和set功能已经自动为我生成。我已经使用来自其他问题的信息生成了swig java类

%{
  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 ); 
}

我的问题是我仍然收到SWIGTYPE_p_std__vectorT_mbuf_t为我的set和get类型,我可以创建给我元素的函数,但我真正需要的是更自然地访问java中的向量元素。

好吧,我发现我缺少一个实际向量的类型定义。

我现在可以通过在我的。I文件中添加一行来访问mbuf类型

%template(ProfileVector) std::vector<mbuf>;
%template(VectorProfileVector) std::vector<std::vector<mbuf> >;