2014-02-27 65 views
-1

我正在對傳統代碼執行一些後臺維護。如何序列化模板類

它涉及用STL替換已棄用的庫並進行提升,同時保持界面與人類可能的類似。

ostream& operator<<(ostream& vos, const OurList<class T>& coll) 
{ 
    // OurList wraps an stl list with the same interface as the current library 
    // OurListIterator wraps an iterator class used to access OurList 

    OurListIterator<T, OurList<class T> > iter((OurList<class T>&)coll); 

    // this function gets the first item in the list and then each next one 
    while (iter()) 
    { 
     // key returns the value pointed to by the iterator 
     vos << iter.key(); 
    } 
}; 

然而,當我編譯我得到一個錯誤的VOS < < iter.key()行:

二進制 '< <':沒有操作員發現這需要右手 型「T」的操作數(或沒有可接受的轉換)

我猜測編譯器抱怨,因爲它不知道提前T是否會serialisable?然而,這在當前的圖書館工作 - 我錯過了什麼?

+0

嘗試刪除'class'。 – Jarod42

回答

2

你可以嘗試:(template <typename T>加,class刪除)。

template <typename T> 
ostream& operator<<(ostream& vos, const OurList<T>& coll) 
{ 
    // OurList wraps an stl list with the same interface as the current library 
    // OurListIterator wraps an iterator class used to access OurList 

    OurListIterator<T, OurList<T> > iter((OurList<T>&)coll); 

    // this function gets the first item in the list and then each next one 
    while (iter()) 
    { 
     // key returns the value pointed to by the iterator 
     vos << iter.key(); 
    } 
} 
+0

也取決於'T'的類型。 'T'不能插入,也不能超載運營商。 – Brandon

+0

已經奏效 - 謝謝! – Stefan