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
This archive was generated by hypermail 2b29 : Fri Jun 08 2001 - 11:51:26 MEST