java - Swig java c++ 传递包含 c++ 结构的 vector vector

标签 java c++ stl vector swig

我一直在查看相关问题,我无法摆脱 swig 指针。

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

typedef struct mbuf{
 int date
 int time
}

在我的类里面我定义了一个 vector 的 vector

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

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

如有任何帮助,我们将不胜感激。

最佳答案

好吧,我发现我缺少实际 vector 的 typedef。

我现在可以通过将行添加到我的 .i 文件来访问 mbuf 类型

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

关于java - Swig java c++ 传递包含 c++ 结构的 vector vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364676/

相关文章:

c++ - 这个声明是什么意思?异常()抛出()

C++添加对列表的元素

java - 在 java 中,出现错误 "Cannot run program "/bin/sh“: java. io.IOException : error=24, 打开的文件太多”

java - 为什么 JOOQ 仅限于整数值而不是长整数?

c++ - 从类到 double 的隐式转换

c++ - 在 Windows (C++) 的 dirent.h 中找不到 seekdir()

java - 带通配符的静态导入

java - 是否可以写一个java类文件然后运行它

c++ - 类型类的 vector (地址簿程序)

c++ - std::bitset 的二进制序列化