2011-10-15 52 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()甚至不会编译。

相关问题