я использую составной шаблон реализовать древовидную структуру. Он имеет 3 класса: узел (базовый класс), лист (без дочернего класса) и ветвь (с дочерним классом). И у меня есть некоторые общие данные, помещенные в узел дерева, например корень. Пример общих данных — выбор единицы измерения метра или километра. Общие данные должны быть доступны для всех узлов. Как это реализовать? Размещение указателя общих данных на всех узлах, похоже, не эффективно для памяти.
Один из способов сделать это — добавить отдельный класс для дерева, поместить root
наведите указатель и добавьте все общие элементы. Затем добавьте tree
указатель на node
базовый класс, а также добавить аргумент конструктора, чтобы указать все узлы дерева обратно в их tree
объект:
class node;
class tree {
node *root;
int multiplier; // e.g. 1000 for meters, 1 for kilometers
}
class node {
protected:
tree *owner;
node *parent; // parent is NULL for the root
node(tree *_owner, node *_parent) : owner(_owner), parent(_parent) {}
};
class branch : public node {
list<node> children;
public:
branch(tree *_owner, node *_parent) : node(_owner, _parent) {}
...
};
Других решений пока нет …