factory注册_创建与override
返回知识网络总入口 · 寄存器与复用
核心结论
factory 在创建时选实际类型,让平台通过派生类替换实现。注册给入口,create 查工厂,override 必须早于目标创建。
关键机制
- 对应 utils 注册,type_id::create 应用规则,直接 new 不应用 override。
- type override 面向类型,instance override 按创建上下文路径限定范围,同次查询实例规则通常优先。
- 优先 by-type,by-name 依赖字符串;参数化类要注意名称支持限制。
- 若 super.build 创建目标,先 override 再 super,按父类逻辑判断。
- factory 改实现,config 改参数,sequence 约束改数据。
小例子或流程
// test build_phase,任何目标packet创建前
packet::type_id::set_type_override(error_packet::get_type());
// 后续仍按基类创建
req = packet::type_id::create("req");error_packet 继承 packet,基类稳定接口和 virtual 方法支持正确分派。
易错点
- 已有对象不会因后来 override 改类型。
- 同名方法不天然多态,要正确 virtual。
- 查路径、直接 new、特化与实际类型,结合 factory 打印。
关联知识
- object与component:两类对象有不同注册和创建约定。
- 组件树与实例路径:instance override 匹配创建上下文路径。
- test与启动流程:test 在创建目标前设置替换策略。
- config_db:改参数与替换实现类型需要不同机制。
- callback:整套替换和钩子扩展适合不同粒度。
- 参数化与平台复用:参数化类需要正确特化、注册和按类型替换。