我将编写一个模板化的KDTree实现,目前只能作为BarnesHut实现的Quadtree或Octree来使用。
重点在于设计,我希望将树定义的维度数量指定为模板参数,然后简单声明一些常用方法,这些方法会自动以正确的方式运行(我认为需要一些模板特化)。
我想要特化模板,以便具有2 ^ 2(四叉树)或2 ^ 3(八叉树)节点。
你们有一些设计思路吗?我想避免继承,因为这会限制我进行动态内存分配而不是静态分配。
这里N可以是2或3。
重点在于设计,我希望将树定义的维度数量指定为模板参数,然后简单声明一些常用方法,这些方法会自动以正确的方式运行(我认为需要一些模板特化)。
我想要特化模板,以便具有2 ^ 2(四叉树)或2 ^ 3(八叉树)节点。
你们有一些设计思路吗?我想避免继承,因为这会限制我进行动态内存分配而不是静态分配。
这里N可以是2或3。
template<int N>
class NTree
{
public:
NTree<N>( const std::vector<Mass *> &);
~NTree<N>()
{
for (int i=0; i<pow(2,N); i++)
delete nodes[i];
}
private:
void insert<N>( Mass *m );
NTree *nodes[pow(2,N)]; // is it possible in a templatized way?
};
另一个问题是四叉树只有4个节点,但是2维,八叉树有8个节点,但是3维,即节点数为2^dimension
。我能否通过模板元编程指定这个呢?我想保留数字4和8,这样循环展开器可以更快。
谢谢!