Re: [ROOT] Constructing an object with TClass() information MORE INFO

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Mon Nov 26 2001 - 16:10:30 MET


Rene,

  TROOT::ProcessLineFast() returns a Long which can be cast to the object
returned by the interpreted code executed (if an object is returned).
Internally it calls TInterpreter::Calc().

-- Fons


On Saturday 24 November 2001 11:40, Rene Brun wrote:
> Fons,
>
> The main advantage of gInterpreter->Calc (new version from Philippe) is
> that it returns the result of the computation, eg pointer to the created
> object in Volker's case.
> However, in a situation where the constructor registers the created object
> to some list, gROOT->ProcessLine (or Fast) is also OK.
>
> Rene Brun
>
> On Sat, 24 Nov 2001, Fons Rademakers wrote:
> > Hi Volker,
> >
> >   better than using directly gInterpreter use gROOT methods:
> >    gROOT->ProcessLineFast()
> > is the equivalent of the Calc() method with in addition some
> > protections to make sure the environment is correctly setup.
> > Idem for gROOT->ProcessLine().
> >
> > Cheers, Fons.
> >
> > On Fri, Nov 23, 2001 at 10:43:34AM +0000, Rene Brun wrote:
> > > Hi Volker,
> > >
> > > Thinking a bit more to your problem, there is a good solution to it
> > > in ROOT 3.02/04 (thanks to Philippe).
> > > Instead of using the function ProcessLine, use Calc.
> > > Example
> > >
> > > TObject *obj=(TObject*)gInterpreter.Calc("new
> > > TH1F(\"h\",\"h\",100,-3,3)") obj->Draw();
> > >
> > > Calc returns the result of the query as a Long_t. You just have to cast
> > > it to the correct type, or simply a TObject* if you like.
> > >
> > > Rene Brun
> > >
> > > Rene Brun wrote:
> > > > Hi Volker,
> > > >
> > > > Following a mail from Axel, I just realize that I misunderstood your
> > > > question.
> > > >
> > > > Why do you want to call TClass::New to create a new object ?
> > > > Why don't you call directly the class constructor?
> > > >
> > > > In case, you want to create an object when you know only the name ot
> > > > its class (could be what you try to do?), you can use the interpreter
> > > > ProcessLine, Example:
> > > >    gInterpreter.ProcessLine("new TH1F(\"h\",\"h\",100,-3,3)")
> > > > will create a new TH1F object. In this particular case, you can
> > > > retrieve a pointer to the created object via gDirectory->Get("h"):
> > > > the TH1F constructor adding automatically a reference to the object
> > > > in the list of objects of the current directory.
> > > > You can modify your constructor to automatically register itself to
> > > > some collection.
> > > >
> > > > Rene Brun
> > > >
> > > > Volker Hejny wrote:
> > > > > Hallo,
> > > > >
> > > > > if I have a class name as a string value at run time, it is
> > > > > possible to construct a new object of this class using
> > > > > TClass::New(). That way the standard constructor is called. Is
> > > > > there any way to call a different constructor with a given
> > > > > argument?
> > > > >
> > > > > Best regards,
> > > > > Volker
> > > > >
> > > > > --
> > > > > Dr. Volker Hejny                Tel: 02461/616853                  
> > > > >    ** Institut f. Kernphysik          Fax: 02461/613930            
> > > > >         **
> > > > > ---------------------------------------------------------------- **
> > > > >  ** --- Forschungszentrum Juelich GmbH, D-52425 Juelich            
> > > > >        **
> >
> > --
> > 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 7679480

-- 
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 7679480



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET