Hi, Rooters, As Root currently stands, in order to use the automatic documentation system one has to use the ClassDef() and ClassImp() macros. There are classes for which this is an imposition, but also where you would nevertheless like to have documentation available. The two cases in particular are: 1) Classes which should never be read and written, for which a Streamer is declared (and if you are careless, auto-generated) anyway. 2) Classes which wrap very small amounts of data, eg. smart pointers, which do not have their own virtual functions and for which the addition of the virtual functions IsA, ShowMembers and Streamer adds a significant (up to a factor of 2) amount to the size of the object. Looking carefully at the definitions of the macros, it appears that it should be feasible to extract the parts needed for documentation generation and use only those in a documentation generation. There are two questions I want to ask: 1) Will doing this create any unintended side effects? I am not entirely familiar with all the ways Root uses its dictionary, so I am unsure of this. 2) If not, could this be added to the Root distribution? The only real change needed (as far as I can tell) is to write a ClassDefDoc macro as a stripped-down ClassDef, which I've reproduced here: #define ClassDefDoc(name,id) \ private: \ static TClass *fgIsA; \ public: \ static const char *DeclFileName() { return __FILE__; } \ static int DeclFileLine() { return __LINE__; } \ static const char *ImplFileName(); \ static int ImplFileLine(); \ static Version_t Class_Version() { return id; } \ static TClass *Class(); \ static void Dictionary(); I've tried using this macro in a non-streamed class of mine, and as far as I could tell everything worked correctly; the class was correctly documented in the output. George Heintzelman gah@bnl.gov
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET