编译期 AOP: 把横切不变式收进循环骨架
从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。
从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。
以采集模块为例,说明骨架加钩子、策略模板、Traits 注入与函数指针擦除的机制、代价,以及用反汇编和体积对比判断是否真的替代了虚函数。
CRTP 把子类名当模板参数传给基类,让基类在编译期认领自己的子类,从而直接调用并内联,不查虚表、不留 vptr。本文拆解它成立的三条原理、与虚函数的差别、踩坑边界,以及在嵌入式状态机里的落地形态。
结合 MISRA C++ 规范和 newosp 工程实践,说明如何用 C++17 模板做编译期分发,在保留代码灵活性的同时去掉虚函数的分发开销。文中数据来自实测:编译期分发比回调模式快 15 倍,比虚函数分发开销低 95% 以上。