2011-05-02 119 views
0

无法识别的模板类型我不能管理有从这样的定义的有效痛饮输出:痛饮:包含在矢量

std::vector< namespaceA::refPtr<namespaceB::myObj> > 

首先,我有性病的自定义定义:: 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计数对象的模板,SWIG输出正确的接口:

%template(MyObjRefPtr) namespaceA::refPtr<namespaceB::MyObj> // OK 

然后我声明我的矢量:

%template(MyObjRefPtrVector) std::vector<MyObjRefPtr> > // compiles but inner types not resolved 

它编译和SWIG生成四种类型:

  • SWIGTYPE_p_std_ vectorTnamespaceA _refPtrTna mespaceB__MyObj_t_t
  • SWIGTYPE_p_MyObjRefPtr
  • MyObjRefPtr
  • MyObjRefPtrVector

生成的类MyObjRefPtr是确定。 类别MyObjRefPtrVector已生成,但方法addsetgetSWIGTYPE_p_MyObjRefPtr作为参数,而不是MyObjRefPtr

有人能告诉我我的代码错在哪里吗?我实在不明白它...

回答

0

而不是

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

模板声明应该是

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