1#ifndef NEFORCE_PLUGIN_PLUGIN_MANAGER_HPP__
2#define NEFORCE_PLUGIN_PLUGIN_MANAGER_HPP__
16NEFORCE_BEGIN_NAMESPACE__
31class NEFORCE_API plugin_manager {
36 mutable mutex mutex_{};
38 unordered_map<string, library_ptr> libraries_{};
39 unordered_map<string, string> plugin_to_library_{};
44 plugin_manager() =
default;
47 plugin_manager(
const plugin_manager&) =
delete;
48 plugin_manager& operator=(
const plugin_manager&) =
delete;
49 plugin_manager(plugin_manager&&) =
delete;
50 plugin_manager& operator=(plugin_manager&&) =
delete;
62 static plugin_manager manager;
127NEFORCE_END_NAMESPACE__
size_t load_plugins(const string &pth)
从目录加载所有插件
unique_ptr< dynamic_library > library_ptr
动态库指针类型
void shutdown_all() noexcept
关闭所有插件
void initialize_all()
初始化所有插件
NEFORCE_NODISCARD vector< string > list_plugins() const
获取所有已加载插件名称
~plugin_manager()
析构函数,关闭所有插件
void load_plugin(string_view pth)
加载单个插件
static plugin_manager & instance()
获取单例实例
NEFORCE_NODISCARD iplugin * get_plugin(const string &name)
获取插件实例
bool unload_plugin(const string &name)
卸载插件
basic_string_view< char > string_view
字符字符串视图
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称