rootcint and multiple inheritance

From: Valeri Tioukov (valeri@na.infn.it)
Date: Wed Feb 09 2000 - 22:27:27 MET


Hi Rooters,

If I have class  Aclass  used by external application and I do not want to
do ANY changement in this class, but I'd like to make it's memebers and
functions visible to Root system (for storage and analisys purpose)
inheriting new Bclass as following:

class Bclass
      :public TObject
      ,public Aclass

Is it possible?

I investigate that without including macros   ClassDef(Aclass,1) into the
body of Aclass  rootcint do not generate  Streamer() and  
ShowMembers() functions. Just mentioning of Aclass in LinkDef.h do not
helps.

So it seems that the answer is NOT: it is not possible to make the members
of classA visible to Root without changements of classA body.

But the same question was asqued at least twice:

http://root.cern.ch/root/roottalk/roottalk98/1986.html
http://root.cern.ch/root/roottalk/roottalk98/0107.html

and in both cases the answers were a bit confusing but positive.

Why do not find the definite answer and add it to FAQ? 

I used for tests:
----------------test.h------------
#include "TObject.h"

class Aclass
{
 private:
  int   a_member;

 public:
  Aclass(){}
  virtual ~Aclass(){}

  //  ClassDef(Aclass,1)   // if this line commented - a_member is hidden  from root
};

class Bclass
      :public TObject
      ,public Aclass
{
  private:
  int b_member;

 public:
  Bclass():Aclass(){}
  virtual ~Bclass(){}

  ClassDef(Bclass,1)
};
-----------------------------------

---------LinkDef.h----------------------
#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;

#pragma link C++ class Aclass;
#pragma link C++ class Bclass;

#endif
---------------------------------------


Without the commented line command

 >  rootcint -f test_h.C -c test.h LinkDef.h

do not care about members of Aclass.


Best regards
Valeri



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:18 MET