SWIG:向量中包含无法识别的模板类型

时间:2011-05-02 14:06:29

标签: c++ templates namespaces swig

我无法从这样的定义中获得有效的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生成四种类型:

  • SWIGTYPE_p_std_ vectorTnamespaceA _refPtrTnamespaceB__MyObj_t_t
  • SWIGTYPE_p_MyObjRefPtr
  • MyObjRefPtr
  • MyObjRefPtrVector

生成的班级MyObjRefPtr没问题。 已生成课程MyObjRefPtrVector,但方法addsetgetSWIGTYPE_p_MyObjRefPtr作为参数,而不是MyObjRefPtr

有人能告诉我我的代码错在哪里吗?我只是想不出来......

1 个答案:

答案 0 :(得分:0)

而不是

%template(MyObjRefPtrVector) std::vector< MyObjRefPtr > >

模板声明应为

%template(MyObjRefPtrVector) std::vector< namespaceA::refPtr< namespaceB::MyObj > >