KDTree のテンプレート化された実装を作成します。これは今のところ、BarnesHut 実装の Quadtree または Octree としてのみ機能するはずです。
ここで重要な点は設計です。ツリーが定義されている次元の数をテンプレート パラメーターとして指定し、いくつかの一般的なメソッドを宣言するだけで、自動的に正しい方法で動作します (テンプレートの特殊化が必要だと思います)。
2^2 (quadtree) または 2^3 (octree) ノードを持つために、テンプレートを特殊化したいと考えています。
誰かがいくつかのデザインのアイデアを持っていますか? 静的割り当てではなく動的メモリ割り当てを行うように制約されるため、継承を避けたいと思います。
ここで、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?
};
もう 1 つの問題は、quadtree には 4 つのノードがありますが 2 次元であり、octree には 8 つのノードがありますが 3 次元です。つまり、ノードの数は です2^dimension
。これをテンプレート メタプログラミングで指定できますか? ループアンローラーが高速になるように、番号 4 と 8 を維持したいと思います。
ありがとうございました!