[ROOT] Changes to ClassDef etc. in CVS head - nested classes

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Tue May 14 2002 - 18:33:43 MEST


Hi all, 

I did a check out of ROOT today, and it seems that there's quite a lot
of changes in the definition of ClassDef and the like.  Also, there's
some namespace stuff in the generated dictionary and so.  Anyway, the
effect of all this, which I don't know if it's intentional or not, is
that now you can use nested classes directly.  That is, like for
example: 

  class Mother : public TObject  {
  private:
    TClonesArray* fChildren; 
  public:
    class Child : public TObject {
    private:
      Int_t fNumber;
    public: 
      Child(Int_t n) : fNumber(n) {} 
      Int_t GetNumber() const { return fNumber; }
      ClassDef(Child, 1);
    };
    
    Mother() : fChildren("Mother::Child") {} 
    void AddChild() { 
      Int_t n = fChildren.GetEntries(); 
      new(fChildren[n]) Child(n); 
    }
    Child* GetChild(Int_t n) { 
      if (n > fChildren.GetEntries() || n < 0) return 0;
      (Child*)return fChildren[n];
    }
    ClassDef(Foo,0) //
  }; 

Previously you had to redefine ClassDef so that CINT wouldn't choke on
some friend declarations and so on. 

So my point is: Is this the intention of these changes or is it a
fortunate side effect?  Does the changes in ClassDef in anyway cause
compatiblity problems?  If so, I think ROOT should bump to version 4. 

Yours, 

 ____ |  Christian Holm Christensen 
  |_| |	 -------------------------------------------------------------
    | |	 Address: Sankt Hansgade 23, 1. th.  Phone:  (+45) 35 35 96 91
     _|	          DK-2200 Copenhagen N       Cell:   (+45) 24 61 85 91
    _|	          Denmark                    Office: (+45) 353  25 305
 ____|	 Email:   cholm@nbi.dk               Web:    www.nbi.dk/~cholm
 | |



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:53 MET