2013-01-16 77 views
2

我一直在环顾相关问题,我无法摆脱swig指针。Swig java C++传递包含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; 
    } 

} 

get和set功能的载体已为我自动生成。 我一直在使用来自其他问题

信息
%{ 
    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类需要更自然地访问java中的向量元素。

任何帮助将不胜感激。

+0

如果你想从Java,我建议你写更多的包装代码自己或者是一种或多种载体的自然访问以C++或Java或两者兼而有之。就我个人而言,我会用Java编写整个事情。 –

回答

1

好吧,我想通了,我错过了实际向量typedef。

我现在有存取权限的mbuf的类型,通过将行到我的.i文件

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