Re: [ROOT] Persistency of TClass*

From: axel@fnal.gov
Date: Wed Jul 31 2002 - 14:50:17 MEST


Hi,

this is why I gave the example: I don't want to store the TClass 
itself. Here's a more elaborate example:

class A {
 static A* GetContainersA(TContainer* cont) {
   return const->GetA(Class());
 }
}

class TContainer {
 A* GetA(TClass* cl) { return map.GetValue(cl); }
 TMap map;
}

Now I can add classes deriving from A to TContainer, without TContainer 
knowing about those classes. Suppose I want to store TContainer::map. 
If I do that, TMap stores the keys (TClasses), but they can't be read 
back properly (i.e. after reading an object of type TContainer GetA() 
doesn't work anymore). That's why I would like to have a way to 
reference a TClass persistently. How?

Cheers, Axel.

----- Original Message -----
From: Rene Brun <brun@pcbrun.cern.ch>
Date: Wednesday, July 31, 2002 0:23 am
Subject: Re: [ROOT] Persistency of TClass*

> Hi Axel,
> 
> We already have a procedure to save the class structure on a file,
> see TStreamerInfo. Do not try to write TClass yourself to a file.
> The dictionary for all classes written to a file is automatically
> written to the file when the file is closed.
> 
> Rene Brun
> 
> 
> On Tue, 30 Jul 2002 axel@fnal.gov wrote:
> 
> > Hi,
> > 
> > writing a TClass to file works without any problems, it's just 
> that the 
> > read TClass is pretty much unusable. This makes kind of sense, 
> as 
> > TClass is more or less a static object. But there are some cases 
> where 
> > storing a TClass* would be helpful, e.g.: A map from TClass* to 
> > whatever-baseclass*, where the TClass* allows to identify and 
> access 
> > objects deriving from whatever-baseclass.
> > 
> > Now, the suggestion I have is to make TClass store only the 
> class name, 
> > and when reading back, to let TClass's streamer search for the 
> TClass 
> > already instantiated which belongs to this class name. I believe 
> this 
> > would be the naive expectation of what a persistent TClass* does.
> > 
> > The questions I have are:
> > * What do you (users and rootdev) think about that? Does it 
> interfere 
> > with what other people do with a persistent TClass?
> > * Reading a member of type TClass*, is there any way ROOT can 
> set this 
> > pointer to the TClass object already instatiated or will we end 
> up with 
> > two instatiations for the same class?
> > 
> > Cheers, Axel.
> > 
> 
> 



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