Вызов конструктора итератора из другого класса - PullRequest
0 голосов
/ 15 октября 2011

Я пытаюсь написать graph class как шаблон класса. Как ответили в Вопросе , я пытался реализовать 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 Ответ

2 голосов
/ 15 октября 2011

Я думаю, что вы хотите предоставить итераторы для вашего класса графа, а итераторы графа - не что иное, как итераторы базового типа контейнера.Если это так, то вы действительно должны это делать,

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() даже не скомпилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...