我设计了一个B树,我正在尝试将这个B-Tree存储变量用于内置或用户定义的任何数据类型,因此,我使用模板编程来设计此数据结构。我开始创建一个B-Tree,用于在RAM中存储无符号的int,最终让它运行并修改程序,使得数据结构从磁盘读取和写入而不是物理内存。
这个项目的当前状态是我对不同的数据类型有不同的类,比如int,string和用户定义的数据类型但是在编写B-Tree的过程中我没注意到重要的设计B树的内部数据结构,即B树节点的设计和表示。 B树的节点大小根据页面大小对齐,并且该对齐随着数据类型的改变而改变,例如字符串,用户定义的数据类型。我不能使这个结构动态,因为结构的成员显然必须在编译时声明。
例如,用于int的B树的节点结构表示为:
struct Node{
unsigned int k[NUMBER];
Node * ptrs[NUMBER+1];
//...other members
}__attribute__((packed));
选择NUMBER使节点适合4096边界。
我不知道如何使这项工作适用于所有数据类型!代码很大,我正在尝试多种方法来使代码工作。我的一个想法是转发在B-Tree.cpp文件中声明struct Node并仅使用相关的类文件(如Int.cpp,String.cpp,Userdefined.cpp)编译代码,并包含Node和NUMBER的定义在那些类文件中,但编译器抛出了不完整类型Node的错误。我该怎么做才能修复我的代码,使容器适用于所有数据类型,Node结构在4096(页面大小)边界上对齐?我非常感谢你的回复!提前谢谢!