插件工厂注册系统
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) 避免工厂创建时抛异常导致崩溃