Я написал общую реализацию B + Tree в памяти на C ++ несколько раз назад, и я думаю о том, чтобы сделать ее постоянной на диске (именно поэтому B + Tree изначально была разработана).Моей первой мыслью было использовать mmap (я под Linux), чтобы иметь возможность манипулировать файлом как обычной памятью и просто переписать оператор new моих классов узлов, чтобы он возвращал указатели в отображенной части исоздать умный указатель, который может преобразовывать адреса ОЗУ в смещение файла, чтобы связать мои узлы с другими.Но я хочу, чтобы моя реализация была универсальной, чтобы пользователь мог хранить int, std :: string или любой другой пользовательский класс, который он хочет, в дереве B +.Вот где возникает проблема: для примитивных типов или агрегированных типов, которые не содержат указателей, это все хорошо, но как только объект содержит указатель / ссылку на выделенный объект кучи, этот подход больше не работает.
Итак, мой вопрос: есть ли какой-нибудь известный способ преодолеть эту трудность?Мои личные поиски по этой теме заканчиваются неудачно, но, возможно, я что-то упустил.