33 #ifndef G4CREATORFACTORYT_HH    34 #define G4CREATORFACTORYT_HH    39 template <
typename T, 
typename Identifier, 
typename Creator>
    54   T* 
Create(
const Identifier& 
id) 
const; 
    58   typedef std::map<Identifier, Creator> 
Map;
    65 template <
typename T, 
typename Identifier, 
typename Creator>
    68 template <
typename T, 
typename Identifier, 
typename Creator>
    71 template <
typename T, 
typename Identifier, 
typename Creator>
    78     ed << 
"Creator with identifier "<<
id<<
" already exists."<<
G4endl;
    80       (
"G4CreatorFactoryT::Register(const Identifier& id, Creator creator)",
    87   std::pair<Identifier, Creator> myPair(
id, creator);
    88   return fMap.insert(myPair).second;
    91 template <
typename T, 
typename Identifier, 
typename Creator>
    95   typename Map::const_iterator iter = 
fMap.find(
id);
    97   if (iter == 
fMap.end()) {
    99     ed << 
"Identifier "<<
id<<
" does not exist."<<
G4endl;
   100     G4Exception(
"G4CreatorFactoryT::Create(const Identifier& id)",
   102                 "Non-existent identifier");
   106   return iter->second();
 std::ostringstream G4ExceptionDescription
 
virtual ~G4CreatorFactoryT()
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4bool Register(const Identifier &id, Creator creator)
 
T * Create(const Identifier &id) const
 
std::map< Identifier, Creator > Map