|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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; }; ... }; |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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:// http://www.boost.org/doc/libs/1_35_0...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. |
|
![]() |
| Outils de la discussion | |
|
|