2013-01-16 79 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> >;