Apollo 10.0
自动驾驶开放平台
apollo::cyber::class_loader::ClassLoaderManager类 参考

#include <class_loader_manager.h>

apollo::cyber::class_loader::ClassLoaderManager 的协作图:

Public 成员函数

 ClassLoaderManager ()
 
virtual ~ClassLoaderManager ()
 
bool LoadLibrary (const std::string &library_path)
 
void UnloadAllLibrary ()
 
bool IsLibraryValid (const std::string &library_path)
 
template<typename Base >
std::shared_ptr< BaseCreateClassObj (const std::string &class_name)
 
template<typename Base >
std::shared_ptr< BaseCreateClassObj (const std::string &class_name, const std::string &library_path)
 
template<typename Base >
bool IsClassValid (const std::string &class_name)
 
template<typename Base >
std::vector< std::string > GetValidClassNames ()
 
template<typename Base >
std::string GetClassValidLibrary (const std::string &class_name)
 get pathof library that class belongs to
 

详细描述

在文件 class_loader_manager.h32 行定义.

构造及析构函数说明

◆ ClassLoaderManager()

apollo::cyber::class_loader::ClassLoaderManager::ClassLoaderManager ( )

在文件 class_loader_manager.cc22 行定义.

22{}

◆ ~ClassLoaderManager()

apollo::cyber::class_loader::ClassLoaderManager::~ClassLoaderManager ( )
virtual

在文件 class_loader_manager.cc24 行定义.

24{}

成员函数说明

◆ CreateClassObj() [1/2]

template<typename Base >
std::shared_ptr< Base > apollo::cyber::class_loader::ClassLoaderManager::CreateClassObj ( const std::string &  class_name)

在文件 class_loader_manager.h70 行定义.

71 {
72 std::vector<ClassLoader*> class_loaders = GetAllValidClassLoaders();
73 for (auto class_loader : class_loaders) {
74 if (class_loader->IsClassValid<Base>(class_name)) {
75 return (class_loader->CreateClassObj<Base>(class_name));
76 }
77 }
78 AERROR << "Invalid class name: " << class_name;
79 return std::shared_ptr<Base>();
80}
Definition base.h:20
#define AERROR
Definition log.h:44

◆ CreateClassObj() [2/2]

template<typename Base >
std::shared_ptr< Base > apollo::cyber::class_loader::ClassLoaderManager::CreateClassObj ( const std::string &  class_name,
const std::string &  library_path 
)

在文件 class_loader_manager.h83 行定义.

84 {
85 ClassLoader* loader = GetClassLoaderByLibPath(library_path);
86 if (loader) {
87 return (loader->CreateClassObj<Base>(class_name));
88 }
89 AERROR << "Could not create classobj, there is no ClassLoader in: "
90 << class_name;
91 return std::shared_ptr<Base>();
92}

◆ GetClassValidLibrary()

template<typename Base >
std::string apollo::cyber::class_loader::ClassLoaderManager::GetClassValidLibrary ( const std::string &  class_name)

get pathof library that class belongs to

参数
class_namederived class
返回
path of library that containing the derived class

在文件 class_loader_manager.h114 行定义.

115 {
116 for (auto& lib_class_loader : libpath_loader_map_) {
117 if (lib_class_loader.second != nullptr) {
118 if (lib_class_loader.second->IsClassValid<Base>(class_name)) {
119 return lib_class_loader.first;
120 }
121 }
122 }
123 return "";
124}

◆ GetValidClassNames()

template<typename Base >
std::vector< std::string > apollo::cyber::class_loader::ClassLoaderManager::GetValidClassNames ( )

在文件 class_loader_manager.h102 行定义.

102 {
103 std::vector<std::string> valid_classes;
104 for (auto class_loader : GetAllValidClassLoaders()) {
105 std::vector<std::string> class_loaders =
106 class_loader->GetValidClassNames<Base>();
107 valid_classes.insert(valid_classes.end(), class_loaders.begin(),
108 class_loaders.end());
109 }
110 return valid_classes;
111}

◆ IsClassValid()

template<typename Base >
bool apollo::cyber::class_loader::ClassLoaderManager::IsClassValid ( const std::string &  class_name)

在文件 class_loader_manager.h95 行定义.

95 {
96 std::vector<std::string> valid_classes = GetValidClassNames<Base>();
97 return (valid_classes.end() !=
98 std::find(valid_classes.begin(), valid_classes.end(), class_name));
99}

◆ IsLibraryValid()

bool apollo::cyber::class_loader::ClassLoaderManager::IsLibraryValid ( const std::string &  library_path)

在文件 class_loader_manager.cc49 行定义.

49 {
50 std::vector<std::string> valid_libraries = GetAllValidLibPath();
51 return (valid_libraries.end() != std::find(valid_libraries.begin(),
52 valid_libraries.end(),
53 library_name));
54}

◆ LoadLibrary()

bool apollo::cyber::class_loader::ClassLoaderManager::LoadLibrary ( const std::string &  library_path)

在文件 class_loader_manager.cc56 行定义.

56 {
57 std::lock_guard<std::mutex> lck(libpath_loader_map_mutex_);
58 if (!IsLibraryValid(library_path)) {
59 libpath_loader_map_[library_path] =
60 new class_loader::ClassLoader(library_path);
61 }
62 return IsLibraryValid(library_path);
63}
bool IsLibraryValid(const std::string &library_path)

◆ UnloadAllLibrary()

void apollo::cyber::class_loader::ClassLoaderManager::UnloadAllLibrary ( )

在文件 class_loader_manager.cc77 行定义.

77 {
78 std::vector<std::string> valid_libraries = GetAllValidLibPath();
79 for (auto& lib : valid_libraries) {
80 UnloadLibrary(lib);
81 }
82}

该类的文档由以下文件生成: