Did you test the macros on nested, nested, nested classes?
Cheers, Fons.
Christian Holm Christensen wrote:
>
> Hi René,
>
> On Wed, 30 May 2001 15:47:40 +0000
> Rene Brun <Rene.Brun@cern.ch> wrote
> concerning ": Re: [ROOT] Nested classes":
> > Hi Christian,
> >
> > Several mods are required in a few places in the ROOT classes to
> > support nested classes.
>
> The first modification that is needed and can nested classes work with
> IO and interactive access, is what I described in
>
> http://root.cern.ch/root/roottalk/roottalk01/1561.html
> http://root.cern.ch/root/roottalk/roottalk01/1562.html
>
> I.e., a new ClassDefNested macro that doesn't contain the
>
> friend operartor <<(TBuffer, <class>)
>
> since CINT chokes on it. As I said in the mails cited above, I'm not
> really sure wether it's a CINT or ROOT problem.
>
> However, you can easily put in that macro now, and nested class will
> almost work, it's really only the MakeProject thing that fails.
>
> Perhaps the macro should be
>
> #define ClassDefNested(mother, child,id) \
> private: \
> static TClass *fgIsA; \
> public: \
> static TClass* MotherClass() { return mother::Class(); }
> static TClass* Class(); \
> static const char* Class_Name(); \
> static Version_t Class_Version() { return id; } \
> static void Dictionary(); \
> virtual TClass* IsA() const { return child::Class(); } \
> virtual void ShowMembers(TMemberInspector &insp, char *parent); \
> virtual void Streamer(TBuffer &b); \
> void StreamerNVirtual(TBuffer &b) {name::Streamer(b);} \
> _ClassInit_(chlid) \
> static const char* DeclFileName() { return __FILE__; } \
> static int DeclFileLine() { return __LINE__; } \
> static const char* ImplFileName(); \
> static int ImplFileLine();
>
> or something.
>
> > In particular, the information must be saved in the dictionary &
> > StreamerInfo.
>
> For IO and interactive use, what is there now, the above is fine I
> believe. In the emails cited above, I define a nested class, and I
> can easily use that in an interactive sesssion, as well as write it to
> a TTree using a TClonesArray and so on.
>
> > Also MakeProject must be modified to take this case into account. I
> > have no plans to implement these changes in the short term.
>
> To the best of my knowledge, it's only for this particular thing that
> the above schema fails.
>
> I hope you'll consider putting in the macro above, at least for now,
> and then perhaps change the TStreamerInfo, TDictionary, etc. classes
> later on. I believe nesting classes like this, is a very powerfull
> thing, since you can essentially say: "This data is really a
> sub-component of that data, and one should not access the one without
> the other". This is different from what Valeri did with TTables.
>
> I'd love to discuss these matters with you at ROOT 2001, but
> unfortunally I'm not going (too little time), so it'll have to be via
> email.
>
> Yours,
>
> Christian -----------------------------------------------------------
> Holm Christensen Phone: (+45) 35 35 96 91
> Sankt Hansgade 23, 1. th. Office: (+45) 353 25 305
> DK-2200 Copenhagen N Web: www.nbi.dk/~cholm
> Denmark Email: cholm@nbi.dk
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:47 MET