Re: Рекурсия в шаблонах.
От: g_i  
Дата: 22.09.04 10:39
Оценка: 37 (2)
Здравствуйте, adontz, Вы писали:

A>Пишу дерево распределение памяти в котором должно регулироваться policy классом.


A>Сей класс имеет такой вид (все исходники сильно упрощены)

A>
A>template <typename T>
A>class memory_manager
A> {
A>  public:
A>   static T * alloc();
A>   static void free(T * pt);
A> }
A>

A>С другой стороны класс узла дерева имеет такой вид
A>
A>template <typename M>
A>class tree_node
A> {
A>  protected:
A>   tree_node * left;
A>   tree_node * right;
A>   tree_node * parent;
A>  public:
A>   tree_node(
A>    left_init = NULL,
A>    right_init = NULL,
A>    parent_init = NULL) :
A>     left(left_init),
A>     right(right_init),
A>     parent(parent_init),
A>    {
A>    }
A>   ~tree_node()
A>    {
A>     M::free(left);
A>     M::free(right);
A>    }
A> }
A>

A>И всё бы хоршо, но! Для того, чтобы инстациировать класс tree_node мне нужен полностью определённый memory_manager, а ему в свою очередь нужен полностью определённый tree_node. Получается что-то такое
A>
A>tree_node<memory_manager<tree_node<memory_manager<tree_node<memory_manager<tree_node<memory_manager<.. :wow: ..> > > > > >
A>


A>Как бы это обойти? Что-то не варит у меня голова


Приходит на ум что-то вроде..
template <class T, template <class> class MemManager> class TreeNode
{
}
template <class T> class MemManager
{
}

TreeNode<MtType,ConcreteManager>...


не оно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.