从另一个类调用iterator构造函数

时间:2011-10-15 19:48:42

标签: c++ stl iterator

我正在尝试将graph类编写为模板类。正如Question中所解释的那样,我试图在graph期间实施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()没有被编译。

1 个答案:

答案 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()甚至不会编译。