Шаблонная реализация QuadTree или Octree на C++

Я собираюсь написать шаблонную реализацию KDTree, которая на данный момент должна работать только как Quadtree или Octree для реализации BarnesHut.

Важным моментом здесь является дизайн, я хотел бы указать номер измерения, в котором дерево определяется как параметр шаблона, а затем просто объявить некоторые общие методы, которые автоматически ведут себя правильно (я думаю, что необходима некоторая специализация шаблона тогда).

Я хотел бы специализировать шаблон, чтобы иметь 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?
};

Другая проблема заключается в том, что дерево квадрантов имеет 4 узла, но имеет 2 измерения, а октодерево имеет 8 узлов, но 3 измерения, т.е. число узлов равно 2^измерению. Могу ли я указать это с помощью шаблонного метапрограммирования? Я хотел бы сохранить номера 4 и 8, чтобы разматыватель петель работал быстрее.

Спасибо!

6
задан linello 19 August 2014 в 09:31
поделиться