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>
76 if (fMap.find(
id) != fMap.end()) {
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