Hi George,
Your macro is OK. However, your point 2 is not correct.
Adding functions to a class cannot double the size of an instance,
unless you have only one instance of these classes.
You only increase the size of the VTBL.
I would be relunctant to increase the number of these macros.
We already introduced a set of macros for templates support.
This makes the life of beginners more difficult.
Rene Brun
On Wed, 16 Feb 2000, George Heintzelman wrote:
>
> 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