2016-05-17 4 views
1

Я пытаюсь реализовать свой собственный совместимый со стандартным списком список, и я не могу понять, почему вы когда-либо хотели бы T-распределитель. В моей реализации класс node содержит сам T, а не указатель на T, хранящийся где-то еще в памяти, поэтому T никогда не выделяется явно, вместо этого он создается только как часть узла. Тогда я понял бы, почему вам нужен распределитель узлов, но почему T?Почему std :: list имеет распределитель типа T?

Упрощенная версия моего узла здесь.

class Node { 
    Node* next, prev; 
    T data; // Not T* 
} 
+3

Это внутренне отскок внутри всех реализованных явлений. Вы не можете требовать от пользователей предоставления распределителя для вашего внутреннего типа узла. –

ответ

4

Добро пожаловать в прекрасный мир распределителей! Вы очень правильно относитесь к своим наблюдениям, и поэтому каждый распределитель должен иметь в нем член типа rebind.

Этот тип позволяет распределителю преобразовывать тип, который был создан с помощью (T) в распределитель для фактического типа, который выделен - что-то особенное для списков или некоторых других контейнеров (например, карт).

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

+0

Так что в основном мне просто нужно использовать переинструкцию с моим распределителем , чтобы выделить мои узлы и не беспокоиться о том, как это изначально предназначалось для Ts? – Keltek

+0

@ Keltek, точно так же. – SergeyA

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