2

私は関連する質問を見回してきましたが、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 をまだ受け取っていることです。要素を提供する関数を作成できますが、本当に必要なのは、Java のベクター要素へのより自然なアクセスです。

どんな助けでも大歓迎です。

4

1 に答える 1

1

わかりました、実際のベクターの typedef が欠けていることがわかりました。

.i ファイルに次の行を追加することで、mbuf タイプにアクセスできるようになりました。

%template(ProfileVector) std::vector<mbuf>;
%template(VectorProfileVector) std::vector<std::vector<mbuf> >;
于 2013-01-17T10:04:34.193 に答える