2011-05-02 71 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> >