Пользовательский контейнер, типы данных и проблемы компиляции

Я разработал B-Tree, и я пытаюсь сделать так, чтобы это B-Tree хранили переменные любого типа данных как встроенные или определяемые пользователем, и поэтому я использую шаблонное программирование для проектирования этой структуры данных. Я начал создавать B-Tree для хранения неподписанных целых в ОЗУ и, в конечном счете, заставил его запустить и модифицировать программу так, чтобы структура данных читалась и записывалась с диска на диск, а не с физической памяти.

Текущее состояние этого проекта состоит в том, что у меня есть разные классы для разных типов данных, таких как int, string и определяемые пользователем типы данных, но в процессе кодирования B-Tree я не обращал внимания на проектирование жизненно важной внутренней структуры данных. B-Tree, т. е. дизайн и представление узлов B-Tree. Размер узлов B-дерева выравнивается в соответствии с размером страницы, и это выравнивание изменяется по мере изменения типа данных, такого как строка, определенный пользователем тип данных. Я не могу сделать эту структуру динамической, так как, очевидно, члены структуры должны быть объявлены во время компиляции.

Например, структура узла B-дерева для целых чисел представлена ​​как:

struct Node{
unsigned int k[NUMBER];
Node * ptrs[NUMBER+1];
//...other members

}__attribute__((packed));

ЧИСЛО выбирается таким образом, чтобы узел подходил к границе 4096.

Я не знаю, как заставить это работать для ВСЕХ типов данных! Код огромен, и я пытаюсь сделать так, чтобы код работал. У меня была одна идея — объявить struct Node в файле B-Tree.cpp и скомпилировать код только с соответствующими файлами классов, такими как Int.cpp, String.cpp, Userdefined.cpp, и включить определение Node и NUMBER. в этих файлах классов, но компилятор выдает ошибку неполного типа Node. Что я должен сделать, чтобы исправить мой код так, чтобы контейнер работал для всех типов данных и структура Node была выровнена по границе 4096 (размер страницы)? Я очень ценю все ваши ответы! Заранее спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector