Apollo 10.0
自动驾驶开放平台
registerer.h 文件参考
#include <map>
#include <string>
#include <vector>
#include "cyber/common/log.h"
registerer.h 的引用(Include)关系图:

浏览源代码.

class  apollo::perception::lib::Any
 
class  apollo::perception::lib::ObjectFactory
 

命名空间

namespace  apollo
 class register implement
 
namespace  apollo::perception
 apollo::perception
 
namespace  apollo::perception::lib
 

宏定义

#define PERCEPTION_REGISTER_REGISTERER(base_class)
 
#define PERCEPTION_REGISTER_CLASS(clazz, name)
 

类型定义

typedef std::map< std::string, ObjectFactory * > apollo::perception::lib::FactoryMap
 
typedef std::map< std::string, FactoryMapapollo::perception::lib::BaseClassMap
 

函数

BaseClassMapapollo::perception::lib::GlobalFactoryMap ()
 
bool apollo::perception::lib::GetRegisteredClasses (const std::string &base_class_name, std::vector< std::string > *registered_derived_classes_names)
 

宏定义说明

◆ PERCEPTION_REGISTER_CLASS

#define PERCEPTION_REGISTER_CLASS (   clazz,
  name 
)
值:
namespace { \
class ObjectFactory##name : public apollo::perception::lib::ObjectFactory { \
public: \
virtual ~ObjectFactory##name() {} \
virtual ::apollo::perception::lib::Any NewInstance() { \
return ::apollo::perception::lib::Any(new name()); \
} \
}; \
__attribute__((constructor)) void RegisterFactory##name() { \
::apollo::perception::lib::GlobalFactoryMap()[#clazz]; \
if (map.find(#name) == map.end()) map[#name] = new ObjectFactory##name(); \
} \
}
std::map< std::string, ObjectFactory * > FactoryMap
Definition registerer.h:80

在文件 registerer.h143 行定义.

◆ PERCEPTION_REGISTER_REGISTERER

#define PERCEPTION_REGISTER_REGISTERER (   base_class)

在文件 registerer.h92 行定义.

93 { \
96 \
97 public: \
98 static base_class *GetInstanceByName(const ::std::string &name) { \
99 FactoryMap &map = \
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; \
114 FactoryMap &map = \
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() { \
124 FactoryMap &map = \
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() { \
130 FactoryMap &map = \
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) { \
137 FactoryMap &map = \
138 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \
139 return map.find(name) != map.end(); \
140 } \
141 };
#define AERROR
Definition log.h:44