Logo ROOT   6.10/09
Reference Guide
Rtypes.h
Go to the documentation of this file.
1 /* @(#)root/base:$Id$ */
2 
3 /*************************************************************************
4  * Copyright (C) 1995-2014, Rene Brun and Fons Rademakers. *
5  * All rights reserved. *
6  * *
7  * For the licensing terms see $ROOTSYS/LICENSE. *
8  * For the list of contributors see $ROOTSYS/README/CREDITS. *
9  *************************************************************************/
10 
11 #ifndef ROOT_Rtypes
12 #define ROOT_Rtypes
13 
14 //////////////////////////////////////////////////////////////////////////
15 // //
16 // Rtypes //
17 // //
18 // Basic types used by ROOT; ClassDef macros. //
19 // //
20 //////////////////////////////////////////////////////////////////////////
21 
22 
23 #include "RtypesCore.h"
24 #include "DllImport.h"
25 
26 #include "snprintf.h" // part of stdio.h on systems that have it
27 #include "strlcpy.h" // part of string.h on systems that have it
28 
29 #include <atomic>
30 #include <stdio.h>
31 #include <string.h>
32 #include <typeinfo>
33 
34 
35 //---- forward declared class types --------------------------------------------
36 
37 class TClass;
38 class TBuffer;
39 class TDirectory;
40 class TMemberInspector;
41 class TObject;
42 class TNamed;
43 class TCollection;
44 class TFileMergeInfo;
45 class TString;
46 
47 //Moved from TSystem.
50  kMAXPATHLEN = 8192,
51  kBUFFERSIZE = 8192,
52  kItimerResolution = 10 // interval-timer resolution in ms
53 };
54 
55 enum EColor { kWhite =0, kBlack =1, kGray=920,
56  kRed =632, kGreen =416, kBlue=600, kYellow=400, kMagenta=616, kCyan=432,
57  kOrange=800, kSpring=820, kTeal=840, kAzure =860, kViolet =880, kPink=900 };
58 
59 // There is several streamer concepts.
60 class TClassStreamer; // Streamer functor for a class
61 class TMemberStreamer; // Streamer functor for a data member
62 typedef void (*ClassStreamerFunc_t)(TBuffer&, void*); // Streamer function for a class
63 typedef void (*ClassConvStreamerFunc_t)(TBuffer&, void*, const TClass*); // Streamer function for a class with conversion.
64 typedef void (*MemberStreamerFunc_t)(TBuffer&, void*, Int_t); // Streamer function for a data member
65 
66 // This class is used to implement proxy around collection classes.
68 
69 typedef void (*VoidFuncPtr_t)(); //pointer to void function
70 typedef TClass* (*DictFuncPtr_t)(); //pointer to dictionary function
71 // NOTE: the previous name must be changed.
72 
73 //--- bit manipulation ---------------------------------------------------------
74 
75 #define BIT(n) (1ULL << (n))
76 #define SETBIT(n,i) ((n) |= BIT(i))
77 #define CLRBIT(n,i) ((n) &= ~BIT(i))
78 #define TESTBIT(n,i) ((Bool_t)(((n) & BIT(i)) != 0))
79 
80 
81 //---- debug global ------------------------------------------------------------
82 
84 
85 
86 //---- ClassDef macros ---------------------------------------------------------
87 
88 typedef void (*ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient);
89 class TVirtualIsAProxy;
90 typedef TClass *(*IsAGlobalFunc_t)(const TClass*, const void *obj);
91 
92 // TBuffer.h declares and implements the following 2 operators
93 template <class Tmpl> TBuffer &operator>>(TBuffer &buf, Tmpl *&obj);
94 template <class Tmpl> TBuffer &operator<<(TBuffer &buf, const Tmpl *obj);
95 
96 // This might get used if we implement setting a class version.
97 // template <class RootClass> Short_t GetClassVersion(RootClass *);
98 
99 namespace ROOT {
100 
101  class TGenericClassInfo;
102  typedef void *(*NewFunc_t)(void *);
103  typedef void *(*NewArrFunc_t)(Long_t size, void *arena);
104  typedef void (*DelFunc_t)(void *);
105  typedef void (*DelArrFunc_t)(void *);
106  typedef void (*DesFunc_t)(void *);
107  typedef void (*DirAutoAdd_t)(void *, TDirectory *);
108  typedef Long64_t (*MergeFunc_t)(void *, TCollection *, TFileMergeInfo *);
110 
111  template <class RootClass> Short_t SetClassVersion(RootClass *);
112 
113  extern TClass *CreateClass(const char *cname, Version_t id,
114  const std::type_info &info, TVirtualIsAProxy *isa,
115  const char *dfil, const char *ifil,
116  Int_t dl, Int_t il);
117  extern void AddClass(const char *cname, Version_t id, const std::type_info &info,
118  DictFuncPtr_t dict, Int_t pragmabits);
119  extern void RemoveClass(const char *cname);
120  extern void ResetClassVersion(TClass*, const char*, Short_t);
121  extern void AddClassAlternate(const char *normName, const char *alternate);
122 
123  extern TNamed *RegisterClassTemplate(const char *name,
124  const char *file, Int_t line);
125 
126  extern void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector&);
127 
128 #if 0
129  // This function is only implemented in the dictionary file.
130  // The parameter is 'only' for overloading resolution.
131  // Used to be a template <class T> TGenericClassInfo *GenerateInitInstance(const T*);
132  template <class T> TGenericClassInfo *GetClassInfo(const T* t) {
133  TGenericClassInfo *GenerateInitInstance(const T*);
134  return CreateInitInstance(t);
135  };
136 #endif
137 
138  namespace Internal {
140  // This class defines the interface for the class registration and
141  // the TClass creation. To modify the default behavior, one would
142  // inherit from this class and overload ROOT::DefineBehavior().
143  // See TQObject.h and table/inc/Ttypes.h for examples.
144  public:
145  virtual ~TInitBehavior() { }
146 
147  virtual void Register(const char *cname, Version_t id,
148  const std::type_info &info,
149  DictFuncPtr_t dict, Int_t pragmabits) const = 0;
150  virtual void Unregister(const char *classname) const = 0;
151  virtual TClass *CreateClass(const char *cname, Version_t id,
152  const std::type_info &info, TVirtualIsAProxy *isa,
153  const char *dfil, const char *ifil,
154  Int_t dl, Int_t il) const = 0;
155  };
156 
158  public:
159  virtual void Register(const char *cname, Version_t id,
160  const std::type_info &info,
161  DictFuncPtr_t dict, Int_t pragmabits) const {
162  ROOT::AddClass(cname, id, info, dict, pragmabits);
163  }
164 
165  virtual void Unregister(const char *classname) const {
166  ROOT::RemoveClass(classname);
167  }
168 
169  virtual TClass *CreateClass(const char *cname, Version_t id,
170  const std::type_info &info, TVirtualIsAProxy *isa,
171  const char *dfil, const char *ifil,
172  Int_t dl, Int_t il) const {
173  return ROOT::CreateClass(cname, id, info, isa, dfil, ifil, dl, il);
174  }
175  };
176 
177  const TInitBehavior *DefineBehavior(void * /*parent_type*/,
178  void * /*actual_type*/);
179  } // namespace Internal
180 
181 } // namespace ROOT
182 
183 // The macros below use TGenericClassInfo and TInstrumentedIsAProxy, so let's
184 // ensure they are included.
185 #include "TGenericClassInfo.h"
186 
187 typedef std::atomic<TClass*> atomic_TClass_ptr;
188 
189 #include "TIsAProxy.h"
190 
191 namespace ROOT { namespace Internal {
193  // Implemented in TGenericClassInfo.cxx
194  static std::string GetImpl(const char* derived_funcname);
195 };
196 /// \class TypeNameExtraction
197 /// Extracts the fully qualified type name by checking for the name of a
198 /// member function as determined by the __PRETTY_FUNCTION__ macro.
199 template <class T>
201  static std::string Get() {
202 #ifdef _MSC_VER // Visual Studio
203 # define R__TNE_PRETTY_FUNCTION __FUNCTION__
204 #else
205 # define R__TNE_PRETTY_FUNCTION __PRETTY_FUNCTION__
206 #endif
207  return GetImpl(R__TNE_PRETTY_FUNCTION);
208 #undef R__TNE_PRETTY_FUNCTION
209  }
210  };
211 
212 
214 public:
215  // All implemented in TGenericClassInfo.cxx.
216  static void SetInstance(::ROOT::TGenericClassInfo& R__instance,
218  static void SetName(const std::string& name, std::string& nameMember);
219  static void SetfgIsA(atomic_TClass_ptr& isA, TClass*(*dictfun)());
220 };
221 
222 template <typename T>
224  public TCDGIILIBase {
226  static std::string fgName;
227  public:
228  static void *New(void *p) { return p ? new(p) T : new T; };
229  static void *NewArray(Long_t nElements, void *p) {
230  return p ? new(p) T[nElements] : new T[nElements]; }
231  static void Delete(void *p) { delete ((T*)p); }
232  static void DeleteArray(void *p) { delete[] ((T*)p); }
233  static void Destruct(void *p) { ((T*)p)->~T(); }
234  static ::ROOT::TGenericClassInfo *GenerateInitInstanceLocal() {
235  static ::TVirtualIsAProxy* isa_proxy = new ::TInstrumentedIsAProxy<T>(0);
236  static ::ROOT::TGenericClassInfo
237  R__instance(T::Class_Name(), T::Class_Version(),
238  T::DeclFileName(), T::DeclFileLine(),
239  typeid(T), ROOT::Internal::DefineBehavior((T*)0, (T*)0),
240  &T::Dictionary, isa_proxy, 0, sizeof(T) );
241  SetInstance(R__instance, &New, &NewArray, &Delete, &DeleteArray, &Destruct);
242  return &R__instance;
243  }
244  static TClass *Dictionary() { fgIsA = GenerateInitInstanceLocal()->GetClass(); return fgIsA; }
245  static TClass *Class() { SetfgIsA(fgIsA, &Dictionary); return fgIsA; }
246  static const char* Name() {
247  if (fgName.empty())
249  return fgName.c_str();
250  }
251  };
252 
253  template<typename T>
255  template<typename T>
257 
258 }} // namespace ROOT::Internal
259 
260 
261 // Common part of ClassDef definition.
262 // DeclFileLine() is not part of it since CINT uses that as trigger for
263 // the class comment string.
264 #define _ClassDefBase_(name,id, virtual_keyword, overrd) \
265 public: \
266  static Version_t Class_Version() { return id; } \
267  virtual_keyword TClass *IsA() const overrd { return name::Class(); } \
268  virtual_keyword void ShowMembers(TMemberInspector&insp) const overrd { ::ROOT::Class_ShowMembers(name::Class(), this, insp); } \
269  void StreamerNVirtual(TBuffer&ClassDef_StreamerNVirtual_b) { name::Streamer(ClassDef_StreamerNVirtual_b); } \
270  static const char *DeclFileName() { return __FILE__; }
271 
272 
273 #define _ClassDefOutline_(name,id, virtual_keyword, overrd) \
274  _ClassDefBase_(name,id, virtual_keyword, overrd) \
275 private: \
276  static atomic_TClass_ptr fgIsA; \
277 public: \
278  static int ImplFileLine(); \
279  static const char *ImplFileName(); \
280  static const char *Class_Name(); \
281  static TClass *Dictionary(); \
282  static TClass *Class(); \
283  virtual_keyword void Streamer(TBuffer&) overrd;
284 
285 #define _ClassDefInline_(name,id, virtual_keyword, overrd) \
286  _ClassDefBase_(name,id, virtual_keyword, overrd) \
287 public: \
288  static int ImplFileLine() { return -1; } \
289  static const char *ImplFileName() { return 0; } \
290  static const char *Class_Name() { return ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector< name >::Name(); } \
291  static TClass *Dictionary() { return ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector< name >::Dictionary(); } \
292  static TClass *Class() { return ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector< name >::Class(); } \
293  virtual_keyword void Streamer(TBuffer& R__b) overrd { \
294  if (R__b.IsReading()) R__b.ReadClassBuffer(name::Class(),this); \
295  else R__b.WriteClassBuffer(name::Class(),this);}
296 
297 #define ClassDef(name,id) \
298  _ClassDefOutline_(name,id,virtual,) \
299  static int DeclFileLine() { return __LINE__; }
300 
301 #define ClassDefOverride(name,id) \
302  _ClassDefOutline_(name,id,,override) \
303  static int DeclFileLine() { return __LINE__; }
304 
305 #define ClassDefNV(name,id) \
306  _ClassDefOutline_(name,id,,) \
307  static int DeclFileLine() { return __LINE__; }
308 
309 #define ClassDefInline(name,id) \
310  _ClassDefInline_(name,id,virtual,) \
311  static int DeclFileLine() { return __LINE__; }
312 
313 #define ClassDefInlineOverride(name,id) \
314  _ClassDefInline_(name,id,,override) \
315  static int DeclFileLine() { return __LINE__; }
316 
317 #define ClassDefInlineNV(name,id) \
318  _ClassDefInline_(name,id,,) \
319  static int DeclFileLine() { return __LINE__; }
320 
321 //#define _ClassDefInterp_(name,id) ClassDefInline(name,id)
322 
323 #define R__UseDummy(name) \
324  class _NAME2_(name,_c) { public: _NAME2_(name,_c)() { if (name) { } } }
325 
326 
327 #define ClassImpUnique(name,key) \
328  namespace ROOT { \
329  TGenericClassInfo *GenerateInitInstance(const name*); \
330  namespace { \
331  static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) __attribute__ ((unused)) = \
332  GenerateInitInstance((name*)0x0)->SetImplFile(__FILE__, __LINE__); \
333  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
334  } \
335  }
336 #define ClassImp(name) ClassImpUnique(name,default)
337 
338 // Macro for Namespace
339 
340 #define NamespaceImpUnique(name,key) \
341  namespace name { \
342  namespace ROOT { \
343  ::ROOT::TGenericClassInfo *GenerateInitInstance(); \
344  namespace { \
345  static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) = \
346  GenerateInitInstance()->SetImplFile(__FILE__, __LINE__); \
347  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
348  } \
349  } \
350  }
351 #define NamespaceImp(name) NamespaceImpUnique(name,default)
352 
353 //---- ClassDefT macros for templates with one template argument ---------------
354 // ClassDefT corresponds to ClassDef
355 // ClassDefT2 goes in the same header as ClassDefT but must be
356 // outside the class scope
357 // ClassImpT corresponds to ClassImp
358 
359 
360 // This ClassDefT is stricly redundant and is kept only for
361 // backward compatibility.
362 
363 #define ClassDefT(name,id) \
364  _ClassDefOutline_(name,id,virtual,) \
365  static int DeclFileLine() { return __LINE__; }
366 
367 #define ClassDefTNV(name,id) \
368  _ClassDefOutline_(name,id,virtual,) \
369  static int DeclFileLine() { return __LINE__; }
370 
371 
372 #define ClassDefT2(name,Tmpl)
373 
374 
375 
376 #define templateClassImpUnique(name,key) \
377  namespace ROOT { \
378  static TNamed *_R__UNIQUE_(_NAME2_(R__dummyholder,key)) = \
379  ROOT::RegisterClassTemplate(_QUOTE_(name), __FILE__, __LINE__); \
380  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyholder,key))); \
381  }
382 #define templateClassImp(name) templateClassImpUnique(name,default)
383 
384 #define ClassImpT(name,Tmpl) templateClassImp(name)
385 
386 //---- ClassDefT macros for templates with two template arguments --------------
387 // ClassDef2T2 goes in the same header as ClassDefT but must be
388 // outside the class scope
389 // ClassImp2T corresponds to ClassImpT
390 
391 #define ClassDef2T2(name,Tmpl1,Tmpl2)
392 #define ClassImp2T(name,Tmpl1,Tmpl2) templateClassImp(name)
393 
394 
395 //---- ClassDefT macros for templates with three template arguments ------------
396 // ClassDef3T2 goes in the same header as ClassDefT but must be
397 // outside the class scope
398 // ClassImp3T corresponds to ClassImpT
399 
400 #define ClassDef3T2(name,Tmpl1,Tmpl2,Tmpl3)
401 #define ClassImp3T(name,Tmpl1,Tmpl2,Tmpl3) templateClassImp(name)
402 
403 
404 //---- Macro to set the class version of non instrumented classes --------------
405 
406 #define RootClassVersion(name,VersionNumber) \
407 namespace ROOT { \
408  TGenericClassInfo *GenerateInitInstance(const name*); \
409  static Short_t _R__UNIQUE_(R__dummyVersionNumber) = \
410  GenerateInitInstance((name*)0x0)->SetVersion(VersionNumber); \
411  R__UseDummy(_R__UNIQUE_(R__dummyVersionNumber)); \
412 }
413 
414 #define RootStreamer(name,STREAMER) \
415 namespace ROOT { \
416  TGenericClassInfo *GenerateInitInstance(const name*); \
417  static Short_t _R__UNIQUE_(R__dummyStreamer) = \
418  GenerateInitInstance((name*)0x0)->SetStreamer(STREAMER); \
419  R__UseDummy(_R__UNIQUE_(R__dummyStreamer)); \
420 }
421 
422 //---- Macro to load a library into the interpreter --------------
423 // Call as R__LOAD_LIBRARY(libEvent)
424 // This macro intentionally does not take string as argument, to
425 // prevent compilation errors with complex diagnostics due to
426 // TString BAD_DO_NOT_TRY = "lib";
427 // R__LOAD_LIBRARY(BAD_DO_NOT_TRY + "BAD_DO_NOT_TRY.so") // ERROR!
428 #define _R_PragmaStr(x) _Pragma(#x)
429 #ifdef __CLING__
430 # define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(cling load ( #LIBRARY ))
431 # define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(cling add_include_path ( #PATH ))
432 # define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(cling add_library_path ( #PATH ))
433 #elif defined(R__WIN32)
434 # define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(comment(lib, #LIBRARY))
435 # define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
436 # define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
437 #else
438 // No way to inform linker though preprocessor :-(
439 // We could even inform the user:
440 /*
441 # define R__LOAD_LIBRARY(LIBRARY) \
442  _R_PragmaStr(message "Compiler cannot handle linking against " #LIBRARY \
443  ". Use -L and -l instead.")
444 */
445 # define R__LOAD_LIBRARY(LIBRARY)
446 # define R__ADD_INCLUDE_PATH(PATH)
447 # define R__ADD_LIBRARY_PATH(PATH)
448 #endif
449 
450 #endif
void AddClass(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Global function called by the ctor of a class&#39;s init class (see the ClassImp macro).
virtual void Unregister(const char *classname) const
Definition: Rtypes.h:165
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition: Rtypes.h:62
long long Long64_t
Definition: RtypesCore.h:69
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
Definition: Rtypes.h:88
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
short Version_t
Definition: RtypesCore.h:61
TLine * line
void(* DelArrFunc_t)(void *)
Definition: Rtypes.h:105
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition: Rtypes.h:108
Definition: Rtypes.h:56
double T(double x)
Definition: ChebyshevPol.h:34
Definition: Rtypes.h:55
Definition: Rtypes.h:55
Definition: Rtypes.h:57
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
Basic string class.
Definition: TString.h:129
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Definition: Rtypes.h:56
Definition: Rtypes.h:56
Abstract base class for accessing the data-members of a class.
ESysConstants
Definition: Rtypes.h:48
const TInitBehavior * DefineBehavior(void *, void *)
TBuffer & operator>>(TBuffer &buf, Tmpl *&obj)
Definition: TBuffer.h:374
TBuffer & operator<<(TBuffer &buf, const Tmpl *obj)
Definition: TBuffer.h:390
Definition: Rtypes.h:57
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
void AddClassAlternate(const char *normName, const char *alternate)
Global function called by GenerateInitInstance.
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
Definition: Rtypes.h:64
::ROOT::TGenericClassInfo * GenerateInitInstanceLocal()
Definition: Rtypes.h:234
void *(* NewFunc_t)(void *)
Definition: Rtypes.h:102
TClass *(* DictFuncPtr_t)()
Definition: Rtypes.h:70
Definition: Rtypes.h:57
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition: Rtypes.h:63
EColor
Definition: Rtypes.h:55
Definition: Rtypes.h:55
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition: Rtypes.h:109
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition: Rtypes.h:103
void RemoveClass(const char *cname)
Global function called by the dtor of a class&#39;s init class (see the ClassImp macro).
Definition: Rtypes.h:57
Collection abstract base class.
Definition: TCollection.h:42
void(* VoidFuncPtr_t)()
Definition: Rtypes.h:69
static std::string Get()
Definition: Rtypes.h:201
TClass * CreateClass(const char *cname, Version_t id, const std::type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il)
Global function called by a class&#39; static Dictionary() method (see the ClassDef macro).
Definition: TClass.cxx:5506
short Short_t
Definition: RtypesCore.h:35
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:71
std::atomic< TClass * > atomic_TClass_ptr
Definition: Rtypes.h:187
static void * NewArray(Long_t nElements, void *p)
Definition: Rtypes.h:229
Short_t SetClassVersion(RootClass *)
virtual void Unregister(const char *classname) const =0
long Long_t
Definition: RtypesCore.h:50
virtual void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const
Definition: Rtypes.h:159
Describe directory structure in memory.
Definition: TDirectory.h:34
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition: TClass.cxx:2885
Definition: Rtypes.h:56
Mother of all ROOT objects.
Definition: TObject.h:37
void(* DelFunc_t)(void *)
Definition: Rtypes.h:104
#define R__EXTERN
Definition: DllImport.h:27
typedef void((*Func_t)())
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition: Rtypes.h:107
Definition: file.py:1
Definition: Rtypes.h:57
R__EXTERN Int_t gDebug
Definition: Rtypes.h:83
Definition: Rtypes.h:56
virtual void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const =0
void Destruct(TCppType_t type, TCppObject_t instance)
Definition: Cppyy.cxx:271
TNamed * RegisterClassTemplate(const char *name, const char *file, Int_t line)
Global function to register the implementation file and line of a class template (i.e.
virtual TClass * CreateClass(const char *cname, Version_t id, const std::type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il) const =0
#define R__TNE_PRETTY_FUNCTION
gr SetName("gr")
Definition: Rtypes.h:57
virtual TClass * CreateClass(const char *cname, Version_t id, const std::type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il) const
Definition: Rtypes.h:169
void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector &)
Indirect call to the implementation of ShowMember allowing [forward] declaration with out a full defi...
Definition: TClass.cxx:513
void(* DesFunc_t)(void *)
Definition: Rtypes.h:106