我无法从这样的定义中获得有效的SWIG输出:
std::vector< namespaceA::refPtr< namespaceB::myObj > >
首先,我有一个std :: vector
的自定义定义namespace std {
template<class T> class vector {
public:
typedef size_t size_type;
typedef T value_type;
typedef value_type const& const_reference;
/*
....
*/
%rename(add) push_back;
void push_back( const_reference x);
%extend {
const_reference get(int i) {
int size = int(self->size());
if (i>=0 && i<size)
return (*self)[i];
else
return *((T*)NULL);
}
void set(int i, const_reference val) {
int size = int(self->size());
if (i>=0 && i<size)
(*self)[i] = val;
}
}
};
}
在命名空间A中,有一个引用指针的模板。我们称之为refPtr
。
在命名空间B中,有一个引用计数类,称为MyObj
。
当我为ref count对象声明模板时,SWIG输出正确的接口:
%template(MyObjRefPtr) namespaceA::refPtr< namespaceB::MyObj > // OK
然后我宣布我的载体:
%template(MyObjRefPtrVector) std::vector< MyObjRefPtr > > // compiles but inner types not resolved
它编译并且SWIG生成四种类型:
生成的班级MyObjRefPtr
没问题。
已生成课程MyObjRefPtrVector
,但方法add
,set
和get
将SWIGTYPE_p_MyObjRefPtr
作为参数,而不是MyObjRefPtr
。
有人能告诉我我的代码错在哪里吗?我只是想不出来......
答案 0 :(得分:0)
而不是
%template(MyObjRefPtrVector) std::vector< MyObjRefPtr > >
模板声明应为
%template(MyObjRefPtrVector) std::vector< namespaceA::refPtr< namespaceB::MyObj > >