4#include <unordered_map>
10std::unordered_map<std::string, chassis_registry::factory>& chassis_factories() {
11 static std::unordered_map<std::string, chassis_registry::factory> value;
15std::mutex& chassis_factories_mutex() {
16 static std::mutex mutex;
20chassis_base*& current_chassis() {
21 static chassis_base* value =
nullptr;
28 std::lock_guard lock{chassis_factories_mutex()};
29 return chassis_factories().emplace(std::move(type), std::move(creator)).second;
33 return current_chassis();
39 std::lock_guard lock{chassis_factories_mutex()};
40 const auto it = chassis_factories().find(std::string{type});
41 if (it == chassis_factories().end())
return nullptr;
48 auto* result =
create(type, info);
49 current_chassis() = result;
50 return result !=
nullptr;
static bool register_type(std::string type, factory creator)
注册一个类型名及其工厂;重复类型名返回 false。
static chassis_base * current()
获取当前已初始化的底盘。
static chassis_base * create(std::string_view type, const std::any &info)
按类型名创建并初始化底盘。
static bool init(std::string_view type, const std::any &info)
按类型名初始化当前底盘。