Использование шаблонов в структуре - для создания общего связанного списка - PullRequest
0 голосов
/ 11 июня 2011

В .NET мне очень понравился System.Generic.List и я хотел воспроизвести его как способ изучения языка C ++. Проблема в том, что я хочу, чтобы он был общим, я хочу, чтобы элементы содержали значение типа шаблона T. Я знаю, что делать, но проблема заключается в узле.

template<class T>
struct node
{
    T value;
    bool isFirst;
    node *next;
};

Я уже некоторое время пытался это найти и не нашел ничего подходящего. Я только что прошел учебники на www.cplusplus.com. Должен ли я ссылаться на класс с указателем, если да, то как?

Заранее спасибо

Жизель Ауне

Ответы [ 2 ]

8 голосов
/ 11 июня 2011

В вашем коде нет ничего плохого.На самом деле, я бы, вероятно, написал бы это как

template<class T>
struct node
{
    T value;
    bool isFirst;
    node<T> *next;
};

, потому что это не намного более многословно и более понятно, что next указывает на node того же типа, но, тем не менее, и ваша версия в порядке:шаблон, когда вы используете имя класса без явного указания параметров шаблона, подразумевается, что они являются теми же, что и шаблон, который создается в данный момент.Это объясняется в §14.6.1 стандарта C ++:

В рамках шаблона класса, когда имя шаблона не является ни квалифицированным, ни сопровождаемым <, оно эквивалентно именишаблона, за которым следуют параметры шаблона, заключенные в <>.[Пример: конструктор для Set может упоминаться как Set() или Set<T>().] К другим специализациям (14.7.3) класса можно обратиться, явно указав имя шаблона с соответствующими аргументами шаблона.[Пример:

template<class T> class X {
    X* p;      // meaning X<T>
    X<T>* p2;
    X<int>* p3;
};

- конец примера]

Кстати, написание универсального списка - полезное упражнение для изучения языка, но имейте в виду, что многие стандартные контейнеры уже доступны в стандартной библиотеке C ++;Помимо того факта, что они прошли тщательное тестирование и оптимизацию, их абстракция «итераторов» позволяет вам использовать практически в любом контейнере автономные алгоритмы, доступные в библиотеке.

2 голосов
/ 11 июня 2011

этот код написан правильно. В любом случае, если вы хотите использовать универсальные списки в c ++, вы можете использовать stl

#include <list>
std::list<int> lista;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...