条款44:将与参数无关的代码抽离 template
模板代码可能因模板参数的变化而导致代码膨胀,从而影响程序的可维护性和运行效率。通过将与模板参数无关的代码抽离,可以减少不必要的膨胀。
避免代码膨胀的策略
-
对非类型模板参数:
将非类型模板参数替换为函数参数或类成员变量。 -
对类型模板参数:
通过共享实现来减少因相同二进制表示的具现类型导致的代码重复。
示例 1:抽离非类型模板参数
// 原始实现:使用非类型模板参数 template <int Threshold> class Widget { public: void process(int value) { if (value > Threshold) { // 处理逻辑 } } }; // 改进实现:使用类成员变量替换模板参数 class Widget { private: int threshold; public: explicit Widget(int t) : threshold(t) {