2014-02-20 3 views
0

У меня есть класс шаблонного узла объявленУплотненного шаблон Выпуск C++

template <class T_> 
    class Node : public std::iterator<std::bidirectional_iterator_tag, T_, T_> 
    { 
    ... 
    } 

Который работает отлично, и я пытаюсь взять этот существующий класс и применить его к новому классу связанного списка.

Я хотел бы создать его, вызвав что-то вдоль линий

LinkedList<float> nodeList; 

где неявно принимает тип заданного, и в структуре класса обрабатывает его как узел типа T_.

Есть ли способ сделать это, не сделав узел подклассом LinkedList?

+0

Помимо основного вопроса, как вы думаете, это хорошая идея наследовать «узел» из 'std :: iterator'? Я не вижу здесь отношения «есть». Вероятно, вы должны переосмыслить свой класс. – Drop

ответ

0

Если я правильно понял ваш вопрос, вам нужно создать экземпляр шаблона класса, используя шаблонный тип класса. Используйте этот синтаксис:

LinkedList<Node<float> > nodeList; 

(обратите внимание на пробел между > >, это всегда хорошая идея, чтобы добавить его, потому что старые версии некоторых компиляторов есть проблемы на выделении таких конструкций от операторов сдвига >>)

+0

Спасибо за быстрый ответ, к сожалению, главное не будет непосредственно знать узлы и, следовательно, может быть напечатано только как LinkedList Kiery

0

вы можете предоставить итератор в качестве шаблона по умолчанию аргумента:

template< 
    class T, 
    class Iterator = Node<T> 
> class LinkedList 
{ 
    // ... 
}; 
1

это то, что вы спрашиваете?

template <class T_> 
class LinkedList 
{ 
public: 
    typedef Node<T_> node_type; 

    void AddNode(node_type *node) 
    { /*...*/ } 
}; 

Технически typedef не является необходимым, но IME это хороший pratice для зависимого определения типа во типы таким образом.

+0

В конечном итоге основная программа не будет знать о узлах напрямую, просто их поведение. Итак, я пробовал что-то по линии void AddNode (T_ value) {/*...*/}, и это вызывает у меня странную ошибку. не может конвертировать из 'Node *' to 'Node *'. Никогда не видел, что с тем же типом, lol ... это означает, что есть проблема с моей копией ctor? – Kiery

+0

@ Kiery, поскольку у вас есть 3 ответа, и все они о разных вещах, я думаю, что вам нужно отредактировать свой вопрос, объясняя, что вы хотите достичь более точно, и добавьте соответствующий код, чтобы получить содержательные ответы. – Drop

+0

@ Drop, это справедливо. Я просто пытаюсь переоценить то, что я пытаюсь сделать в этот момент, проблема может сортироваться, но я посмотрю, что я могу сделать. – Kiery

Смежные вопросы