Re: Templates and inheritance: Double dependancy
On Dec 29 2007, 3:45 pm, Rune Allnor <all...@tele.ntnu.no> wrote:
On 28 Des, 20:46, Rune Allnor <all...@tele.ntnu.no> wrote:
I am trying to implement a red-black binary tree in terms of
of an overloaded binary tree class.
...
One idea which seems attractive is to code a template
specfication like
template<class T, class U>
where the template U is somehow expanded to
either TreeNode<T> or RBTreeNode<T> as
required.
I have experimented a bit, and one approach which *seems*
to work is
template<class T, class U = TreeNode<T> >
class BinaryTree{
U* Buffer_;
};
template<class T, class U = RBTreeNode<T> >
class RBBinaryTree : public BinaryTree<T,U>{
U* Buffer_;
};
Note that in the above declarations, RBBinaryTree ends up with two
Buffer_ member variables - one hding the other.
Furthermore, I don't see why RBinaryTree should accept a second type
parameter (specifying the node type). Doesn't an RBBinaryTree<T>
require an RBTreeNode<T> as its node type? In other words, I would
expect:
template <class T, class U = TreeNode<T> >
class BinaryTree
{
typedef U NodeType;
NodeType * Buffer_;
};
template <class T>
class RBBinaryTree : public BinaryTree<T, RBTreeNode<T> >
{
// ,,,
};
After all, the type parameter list of a class template - should not
allow type arguments that are more generic than its implementation can
actually support. Or, to paraphrase Einstein: "A class template should
be as generic as possible - but not more so." :-)
Greg
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]