问题域/PD-231

插件工厂注册系统

Plugin Factory Registry

通过工厂模式和编译期/运行时自动注册实现可扩展的组件管理

子问题

1.组件自动发现与注册

2.按名称动态创建实例

3.编译期宏注册 vs 运行时注册

4.同一实现类多别名注册与构造参数绑定

5.const char* 静态字符串 key 的生命周期与比较语义

6.模板单例工厂的跨编译单元初始化顺序保证

各项目的解法1 solutions

Signals

横向对比

维度zvec
注册机制C++ 模板 + 宏展开静态变量,编译期自动注册
组件类型数14 类组件(Metric/Builder/Searcher/Storage 等),每类独立注册表
别名支持ALIAS 宏支持同一实现注册多个名称并传入不同构造参数
类型安全std::is_base_of SFINAE 编译期约束 + friend 保护 set_name
发现能力Classes() 枚举所有已注册名称,Has() 按名称查询存在性
内存管理MakeShared/MakeUnique 返回智能指针,new(nothrow) 防异常

最佳实践

1.使用静态注册避免手动维护组件列表

2.用 SFINAE is_base_of 约束注册类型防止误注册

3.用 friend 声明保护工厂专属的内部设置方法

4.用 new(nothrow) 避免工厂创建时抛异常导致崩溃