Есть ли способ добавить к частной переменной класс STL в вашем коде? Например, сделав так, чтобы к любому экземпляру «std :: list» добавилась дополнительная переменная. Или вам просто нужно составить свой собственный список с нуля?Добавление частной переменной в C++ stl class
ответ
В некоторых случаях да. Например, std :: istream и std :: ostream имеют специальный, редко используемый метод, называемый xalloc()
, который позволяет добавлять один или несколько членов long
или void*
ко всем экземплярам этих классов.
Но это не типично. Для классов контейнеров, таких как std :: list, нет такого элемента, который бы добавлял «слоты» для хранения пользовательских данных.
Однако классы контейнеров имеют необязательный аргумент шаблона для распределителя. Каждый контейнер имеет распределитель, который по умолчанию является безстоящим и использует new
и delete
для распределения элементов. В C++ 11 и более поздних версиях эти распределители могут быть «stateful», что означает, что вы можете сделать свой собственный распределитель с помощью new
и delete
, а также хранить произвольные дополнительные данные.
Как только вы написали свой распределитель с нужным вам состоянием, вы можете его получить, например. из списка, используя get_allocator()
.
Использование распределителя - это умный трюк. Спасибо. – YSC
Почему бы не сделать класс, полученный из 'std :: list'? Создание собственного с нуля - это, как правило, очень плохая идея. – tadman
@tadman Не забывайте 'private'ly. – LogicStuff
Звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - что вы * на самом деле пытаетесь достичь? –