SWIG : unrecognized template type contained in vector
我无法从这样的定义中获得有效的swig输出:
1 | std::vector< namespaceA::refPtr< namespaceB::myObj > > |
首先,我有一个std::vector的自定义定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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中,有一个引用指针的模板。我们称之为
当我为引用计数对象声明模板时,swig输出正确的接口:
1 | %template(MyObjRefPtr) namespaceA::refPtr< namespaceB::MyObj > // OK |
然后我声明我的向量:
1 | %template(MyObjRefPtrVector) std::vector< MyObjRefPtr > > // compiles but inner types not resolved |
它编译并生成四种类型:
- swigtype_p_std_vectortnamespacea_refptrttnamespaceb_uu myobj_t_t
- 开关类型
- MyObjRefpPTR
- MYobjRefptrVector(MYobjRefptrVector)
生成的类EDOCX1·2是可以的。生成EDOCX1×3的类,但
有人能告诉我我的代码哪里错了吗?我就是想不出来…
而不是
1 | %template(MyObjRefPtrVector) std::vector< MyObjRefPtr > > |
模板声明应为
1 | %template(MyObjRefPtrVector) std::vector< namespaceA::refPtr< namespaceB::MyObj > > |