Решил написать простенькую иерархию шаблонов по использованию различных деревьев и обломался (((
| Код | // Типа узел template<class Key, class Data> class BinaryNode { private: friend class BinaryTree; protected: Key key; Data data; BinaryNode<Key, Data> *left, *right, *parent; ... }; // Обычное двоичное дерево template<class Key, class Data, template<class Key, class Data> class Node = BinaryNode> class BinaryTree { protected: Node<Key, Data>* root; public: BinaryTree<Key, Data, Node> () : root(0) {}
virtual ~BinaryTree() { delete root; } ... }; // Начинается интересно ))) template <class Key, class Data> class AVLNode : public BinaryNode<Key, Data> { private: friend class AVLTree; protected: char balance; public: AVLNode<Key, Data> (const Key& k, const Data& d) : BinaryNode<Key, Data> (k, d), balance(0) {} AVLNode<Key, Data> *LBalance(bool& flag) { // что-то делаем и производим обмен данными между вершинами, т.е. AVLNode<Key, Data> *Left = left; left = left->parent; // выдается ошибка(дескать разные типы) } ... }; // AVL дерево template <class Key, class Data, template<class Key, class Data> class Node = AVLNode> class AVLTree : public BinaryTree<Key, Data, Node> { public: AVLTree<Key, Data, Node >() : BinaryTree<Key, Data, Node >() {} ... };
|
Пытался заставить ето работать, но тщетно. Потом пытался сделать так
| Код | template<class Key, class Data, template<class Key, class Data> class Node = BinaryNode> class BinaryNode { private: friend class BinaryTree; protected: Key key; Data data; Node<Key, Data> *left, *right, *parent; }; ...
|
| Код | AVLNode<int, char> node(10, 's');
|
Но тогда мне выдалось такое, что очень давно не видел:
| Цитата | error C2262: 'node' : cannot be destroyed
|
Понимаю, что так разобраться трудно(могу выслать исходники), но если кто-то врубился о чем идет речь, то помогите. %))))) |