2011-10-15 92 views
-1

我試圖將類寫作模板類。如在Question回答,我試圖執行在std::set的條款,這是我寫到現在。從另一個類調用迭代器構造函數

#include <set> 

    template <class T, 
      class Container = std::set<T> > 
    class graph { 
    public: 
     class iterator { 
     public: 
      iterator() { 
       std::set<T>::iterator(); 
      } 
      iterator(const iterator&) { 
       std::set<T>::iterator(); 
      } 
      ~iterator() { 
       std::set<T>::~iterator(); 
      } 

什麼我找的這裏是每當graph::itertor被調用時,在內部它應該叫set::iterator,這是正常的做法,爲什麼~iterator()是沒有得到編譯。

+0

你不是在這裏調用構造函數,而是在構造臨時對象,它確實沒有。 –

+0

你的例子不完整。你究竟想要做什麼? –

回答

2

我想你想爲你的圖類提供迭代器,而圖的迭代器只不過是底層容器類型的迭代器。如果是這樣,那麼你實際上應該這樣做,

template <class T, class Container = std::set<T> > 
class graph 
{ 
public: 
    typedef typename Container::iterator iterator; 
    typedef typename Container::const_iterator const_iterator; 

    //... 
}; 

至於你的代碼,我會說,std::set<T>::iterator()創建一個臨時對象,並臨時在得到充分表達的結束時被銷燬。故事就此結束。並且std::set<T>::~iterator()甚至不會編譯。

相關問題