我一直在查看相关问题,我无法摆脱 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/