2010-10-16 52 views
0

我正在尝试编写B +树的通用C++实现。我的问题来自于B +树中有两种节点;包含子节点的键和指针的内部节点,包含键和值的叶节点以及内部节点中的指针可以指向其他内部节点或叶节点。 我无法确定如何模拟这种与模板的关系(我不想使用强制类或虚拟类)。在C++中设计B +树模板类时的问题

希望有一个解决我的问题或更好的方式来实现在C + + B +树。

+0

也许'的std :: map'的实现可以给你一些想法有所简化? – 2010-10-16 15:02:38

+0

您将如何为特定类型的键和值设计它?你可以使它作为一个非模板工作吗?然后用模板参数替换特定的类型。 – UncleBens 2010-10-16 15:29:35

回答

1

最简单的方法:

bool mIsInternalPointer; 
union { 
    InternalNode<T>* mInternalNode; 
    LeafNode<T>* mLeafNode; 
}; 

这可以通过使用boost::variant :)

+0

这就是我第一眼就选择实施它的方式,但我预计会有更多的“模板化”。我的意思是,它看起来像一个黑客低级别的技巧(不安全,这就是为什么我喜欢模板);但它听起来像是我做我所做的事情的唯一方法。 – fokenrute 2010-10-17 01:02:18

+0

@fokenrute:使用'boost :: variant'你会得到类型安全:) – 2010-10-17 09:43:24