00001 // $Id: GiGaExternalPhC.h,v 1.3 2007/03/26 09:01:39 gcorti Exp $ 00002 #ifndef GIGA_GIGAEXTERNALPHC_H 00003 #define GIGA_GIGAEXTERNALPHC_H 1 00004 00005 // Include files 00006 #include "GiGa/IGiGaPhysConstructor.h" 00007 #include "GiGa/GiGaPhysConstructorBase.h" 00008 00009 00026 template <class PHYSICSCONSTRUCTOR> 00027 class GiGaExternalPhC : 00028 public virtual IGiGaPhysConstructor , 00029 public virtual GiGaPhysConstructorBase , 00030 public virtual G4VPhysicsConstructor , 00031 public virtual PHYSICSCONSTRUCTOR 00032 { 00034 typedef GiGaExternalPhC<PHYSICSCONSTRUCTOR> MyType ; 00035 00036 protected: 00037 00052 GiGaExternalPhC( const std::string& type , 00053 const std::string& name , 00054 const IInterface* parent ) 00055 : GiGaPhysConstructorBase ( type , name , parent ) 00056 , PHYSICSCONSTRUCTOR ( name ) 00057 , G4VPhysicsConstructor ( name ) 00058 { 00059 // check for virtual inheritance 00060 // the following line COULD produce compiler warning 00061 // for CORRECT inheritance schema and 00062 // it MUST produce the compiler error 00063 // for INCORECT inheritance schema 00064 G4ParticleTable* tt = theParticleTable ; 00065 }; 00066 00068 virtual ~GiGaExternalPhC() {}; 00069 00070 private: 00071 00072 // default constructor is provate 00073 GiGaExternalPhC(); 00074 // copy constructor is private 00075 GiGaExternalPhC ( const MyType& ); 00076 // assigement operator is private 00077 GiGaExternalPhC& operator=( const MyType& ); 00078 00079 }; 00080 00081 #endif // GIGA_GIGAEXTERNALPHC_H 00082