4#include <unordered_map>
11std::unordered_map<std::string, gimbal_registry::factory>& gimbal_factories() {
12 static std::unordered_map<std::string, gimbal_registry::factory> value;
16std::mutex& gimbal_factories_mutex() {
17 static std::mutex mutex;
21gimbal_base*& current_gimbal() {
22 static gimbal_base* value =
nullptr;
29 std::lock_guard lock{gimbal_factories_mutex()};
30 return gimbal_factories().emplace(std::move(type), std::move(creator)).second;
34 return current_gimbal();
40 std::lock_guard lock{gimbal_factories_mutex()};
41 const auto it = gimbal_factories().find(std::string{type});
42 if (it == gimbal_factories().end())
return nullptr;
45 auto result = creator(info);
46 if (!result)
return nullptr;
47 auto* pointer = result.get();
49 static std::vector<std::unique_ptr<gimbal_base>> instances;
50 instances.push_back(std::move(result));
55 auto* result =
create(type, info);
56 current_gimbal() = result;
57 return result !=
nullptr;
static gimbal_base * current()
获取当前已初始化的云台。
static gimbal_base * create(std::string_view type, const std::any &info)
按类型名创建并初始化云台。
static bool init(std::string_view type, const std::any &info)
按类型名初始化当前云台。
static bool register_type(std::string type, factory creator)
注册一个类型名及其工厂;重复类型名返回 false。