templates - convert nested to declaration and implementation

Discussion in 'C++' started by Christopher, Apr 8, 2008.

  1. Christopher

    Christopher Guest

    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;
    };
    ...
    };
    Christopher, Apr 8, 2008
    #1
    1. Advertising

  2. Christopher

    Brian Tyler Guest

    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.
    Brian Tyler, Apr 8, 2008
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page