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. Advertisements

  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. Advertisements

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.
Similar Threads
  1. JKop
    Replies:
    3
    Views:
    689
  2. kelvSYC
    Replies:
    6
    Views:
    8,012
    Richard Herring
    May 17, 2005
  3. Generic Usenet Account
    Replies:
    3
    Views:
    1,070
    Generic Usenet Account
    Jul 14, 2005
  4. BigMan
    Replies:
    1
    Views:
    564
  5. recover
    Replies:
    2
    Views:
    1,066
    recover
    Jul 25, 2006
  6. Replies:
    0
    Views:
    399
  7. Replies:
    1
    Views:
    407
    metarox
    Jun 10, 2008
  8. Giovanni Gherdovich
    Replies:
    6
    Views:
    599
    Giovanni Gherdovich
    Aug 19, 2008
Loading...