Hi Christian,
nested classes are not supported by CINT.
Victor
Christian Holm Christensen wrote:
>
> Hi ROOT'ers,
>
> I'm starting to use nested classes for data storage, since that's
> a very neat of encapsulating data types. For example
>
> class DataTable : public TObject {
> private:
> TClonesArray fTable;
> UInt_t fNEntries;
> Float_t fSumEnergy;
> Float_t fAvarageEnergy;
> Flaot_t fEnergyVariance;
>
> public:
> class Data : public TObject {
> private:
> UInt_t fId;
> Float_t fEnergy;
> public:
> Data(UInt_t id=0, Float_t energy=0) : fId(id), fEnergy(energy) {}
> virtual ~Data() {}
> UInt_t GetId() const { return fId; }
> void SetId(UInt_t id) { fId = id; }
> Float_t GetEnergy() const { return fEnergy; }
> void SetEnergy(Float_t energy) { fEnergy = energy; }
>
> ClassDef(Data, 1) //
> };
>
> DataTable() : fTable("DataTable::Data") {}
> virtual ~DataTable() {}
>
> Data* AddData(UInt_t id, Float_t energy) {
> return new (fTable[fEntries++]) Data(id, energy);
> fSumEnergy += energy;
> ...
> }
> Data* FindData(UInt_t id) {
> TIter next(&fTable);
> Data* data = 0;
> while ((data = (Data*)next()))
> if (data->GetId() == id)
> return data;
> return 0;
> }
>
> ClassDef(DataTable, 1) // Table of data
> };
>
> As I've pointed out earlier,
>
> http://root.cern.ch/root/roottalk/roottalk01/1561.html
> http://root.cern.ch/root/roottalk/roottalk01/1562.html
>
> one has to do a couple of tricks to make this work.
>
> However, there's another problem in all this, which has to do with
> the MakeProject feature of TFile. When asking to make the classes
> from the StreamerInfo, ROOT makes the files:
>
> DataTable.h
> DataTable::Data.h
>
> but DataTable::Data isn't mentioned as a nested class in DataTable.h!,
> so in essence DataTable::Data.h will define a namespace, not a nested
> class, which I believe is the wrong behaviour. There are other
> problems too, pertaining to the '::' in the class name.
>
> So I suggest that ROOT makes a ClassDefNested(mother, child, version)
> macro and maybe a ClassImpNested(mother, child) macro too, that will
> take care of these things. Perhaps the dictionary for a given class
> should say wether it is a nested class or not, and perhaps also have a
> list of class nested in it.
>
> Hope you find this useful.
>
> 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
--
Victor M. Perevoztchikov perev@bnl.gov perev@vxcern.cern.ch
Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000
tel office : 631-344-7894; fax 631-344-4206; home 631-345-2690
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:47 MET