93 { \
96 \
97 public: \
98 static base_class *GetInstanceByName(const ::std::string &name) { \
100 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
101 FactoryMap::iterator iter = map.find(name); \
102 if (iter == map.end()) { \
103 for (auto c : map) { \
104 AERROR <<
"Instance:" << c.first; \
105 } \
106 AERROR <<
"Get instance " << name <<
" failed."; \
107 return nullptr; \
108 } \
109 Any object = iter->second->NewInstance(); \
110 return *(object.AnyCast<base_class *>()); \
111 } \
112 static std::vector<base_class *> GetAllInstances() { \
113 std::vector<base_class *> instances; \
115 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
116 instances.reserve(map.size()); \
117 for (auto item : map) { \
118 Any object = item.second->NewInstance(); \
119 instances.push_back(*(object.AnyCast<base_class *>())); \
120 } \
121 return instances; \
122 } \
123 static const ::std::string GetUniqInstanceName() { \
125 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
126 CHECK_EQ(map.size(), 1U) << map.size(); \
127 return map.begin()->first; \
128 } \
129 static base_class *GetUniqInstance() { \
131 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
132 CHECK_EQ(map.size(), 1U) << map.size(); \
133 Any object = map.begin()->second->NewInstance(); \
134 return *(object.AnyCast<base_class *>()); \
135 } \
136 static bool IsValid(const ::std::string &name) { \
138 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
139 return map.find(name) != map.end(); \
140 } \
141 };