Пишу дерево распределение памяти в котором должно регулироваться policy классом.
Сей класс имеет такой вид (все исходники сильно упрощены)
template <typename T>
class memory_manager
{
public:
static T * alloc();
static void free(T * pt);
}
С другой стороны класс узла дерева имеет такой вид
template <typename M>
class tree_node
{
protected:
tree_node * left;
tree_node * right;
tree_node * parent;
public:
tree_node(
left_init = NULL,
right_init = NULL,
parent_init = NULL) :
left(left_init),
right(right_init),
parent(parent_init),
{
}
~tree_node()
{
M::free(left);
M::free(right);
}
}
И всё бы хоршо, но! Для того, чтобы инстациировать класс tree_node мне нужен полностью определённый memory_manager, а ему в свою очередь нужен полностью определённый tree_node. Получается что-то такое
tree_node<memory_manager<tree_node<memory_manager<tree_node<memory_manager<tree_node<memory_manager<.. :wow: ..> > > > > >
Как бы это обойти? Что-то не варит у меня голова