templates - convert nested to declaration and implementation

C

Christopher

I have a few questions. My template class is getting very messy and I
have a need to make it more clear.
The first is how to change nested classes where the implementation is
embedded in the definition to a separate definition and
implementation. The other is, after doing the first, How can I keep
class Node hidden aside from using pimpl? I'd also like to keep the
concept of Iterator being specific to Tree, i.e Tree::Iterator and not
allow a user to declare Iterator by itself. The notion of class scope,
as it is in C#, would be nice here, but it is unavailable.



template <class T>
class Tree
{
class Node
{
T m_data
...
public:
...
T & GetData();
...
};

...
public:
...
class Iterator
{
Node * m_node;
};
...
};
 
B

Brian Tyler

I think that separating a template class interface from implementation
probably creates more problems than it is worth. A better solution might
be to work on your notation.

Try taking a look at the doxygen website (http://www.stack.nl/~dimitri/
doxygen/index.html) Doxygen is a documentation system for C++ and other
languages. I find that by using doxygen syntax to document my code it
naturally becomes clean and manageable, even in big temaplate classes. On
top of that you get a pdf of html manual documenting your code. It is a
bit of a virtuous circle.

As for the iterator, you will probably find it much easier to write it as
a separate non-nested class and then just typedef it into the class:

class iterator_for_foo {
// stuff
};

class foo {
public:
typedef iterator_for_foo iterator;
// stuff
};

For writing iterators the boost iterator library is very useful (http://
www.boost.org/doc/libs/1_35_0/libs/iterator/doc/index.html)

I personally wouldn't worry about people being able to "declare Iterator
by itself." What are they going to do with it?

Brian.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top