2016-11-27 12 views
1

Есть ли способ добавить к частной переменной класс STL в вашем коде? Например, сделав так, чтобы к любому экземпляру «std :: list» добавилась дополнительная переменная. Или вам просто нужно составить свой собственный список с нуля?Добавление частной переменной в C++ stl class

+2

Почему бы не сделать класс, полученный из 'std :: list'? Создание собственного с нуля - это, как правило, очень плохая идея. – tadman

+1

@tadman Не забывайте 'private'ly. – LogicStuff

+8

Звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - что вы * на самом деле пытаетесь достичь? –

ответ

3

В некоторых случаях да. Например, std :: istream и std :: ostream имеют специальный, редко используемый метод, называемый xalloc(), который позволяет добавлять один или несколько членов long или void* ко всем экземплярам этих классов.

Но это не типично. Для классов контейнеров, таких как std :: list, нет такого элемента, который бы добавлял «слоты» для хранения пользовательских данных.

Однако классы контейнеров имеют необязательный аргумент шаблона для распределителя. Каждый контейнер имеет распределитель, который по умолчанию является безстоящим и использует new и delete для распределения элементов. В C++ 11 и более поздних версиях эти распределители могут быть «stateful», что означает, что вы можете сделать свой собственный распределитель с помощью new и delete, а также хранить произвольные дополнительные данные.

Как только вы написали свой распределитель с нужным вам состоянием, вы можете его получить, например. из списка, используя get_allocator().

+0

Использование распределителя - это умный трюк. Спасибо. – YSC