Нужно отметить также, что это, конечно, только найдет все те подклассы, которые существуют на Вашем текущем пути к классу. По-видимому, это хорошо для того, на что Вы в настоящее время смотрите, и возможности - Вы, действительно рассматривал это, но если Вы имеете в какой-либо точке, выпущенной не - final
класс в дикую местность (для переменных уровней "диких") затем, совершенно выполнимо, что кто-то еще записал их собственный подкласс, о котором Вы не будете знать.
Таким образом, если Вы, оказалось, желали видеть все подклассы, потому что Вы хотите внести изменение и собираетесь видеть, как оно влияет на поведение подклассов - затем, принимают во внимание подклассы, которые Вы не видите. Идеально все Ваши незакрытые методы и сам класс должны быть хорошо зарегистрированы; внесите изменения согласно этой документации, не изменяя семантику methods/non-private полей, и Ваши изменения должны быть назад совместимыми для любого подкласса, который следовал Вашему определению суперкласса, по крайней мере.
Вы можете посмотреть STXXL :
«Ядро STXXL - это реализация стандартной библиотеки шаблонов C ++ STL для внешней памяти (вне -core) вычислений, то есть STXXL реализует контейнеры и алгоритмы, которые могут обрабатывать огромные объемы данных, которые помещаются только на диски »
Вы можете изучить библиотеку STLXX . Он содержит дисковую приоритетную очередь, использующую модель « Sequence Heap », описанную Питером Сандерсом.
Безумная идея: реализовать класс распределителя, который считывает / записывает в файл на диске и из него и передает его в STL deque
или очередь
или все, что вам подходит.
Расскажите нам о данных. Каждый предмет большой или маленький? Это фиксированный размер или сильно изменчивый? Проблема с дисковым хранилищем заключается в том, что по мере того, как элементы становятся более разнообразными по размеру, проблема начинает напоминать проблему с базой данных. В этом случае вам, вероятно, следует изучить что-то вроде базы данных sqllite в качестве резервного хранилища для вашей очереди. Затем вы можете просто использовать SQL для извлечения первой записи.
Если данные действительно большие, вы можете просто сохранить каждый объект в файловой системе, используя постоянно увеличивающееся имя файла. Тогда вам даже не нужно хранить очередь в памяти. Дата файла становится вашим порядком FIFO. Просто возьмите самый старый файл в каталоге, чтобы вытащить первый элемент из «стека».
Наконец, если данных мало и много, вы можете подумать о переопределении Распределителя std :: list или std :: deque. Возможно, удастся скрыть ввод-вывод файла в классе Allocator. У меня нет простого решения для небольшого и большого количества данных.