模板专业化还是条件表达式?

ste*_*fen 3 c++ templates specialization open-closed-principle

我深入研究了一个新项目,我用一堆模板和专业知识来解决这个问题.现在,在没有编程的一天之后,我发现自己在询问是否真的值得额外的代码行.

问题是:专业化有哪些优势?

这是:

template <int i> class A {};
template <> class A <1> { void foo() {/* something */}  };
template <> class A <2> { void foo() {/* something else*/}  };
template <> class A <3> { void foo() {/* even different*/}  };
Run Code Online (Sandbox Code Playgroud)

以任何方式更好(更快的执行)

template <int i> class A { 
   void foo() {
      if (i==1) {/* something */}
      else if (i==2) {/* something else*/}
      else if (i==3) {/* even different*/}
   }
};
Run Code Online (Sandbox Code Playgroud)

编辑:

该代码是其他人使用的库的一部分.我正在使用gcc 4.6.3但最终代码将与不同的编译器一起使用.

编辑:

这两段代码使用gcc 4.6.3生成相同的二进制文件.我无法测试完整的情况,因为我的实际代码远远无法使用.它似乎是一个原则,通用性,可重用性,可维护性等问题......

Tem*_*Rex 6

速度不是这里的主要问题,但可扩展性是.

专业化的优势在于,您可以使代码的客户端更容易添加新的重载foo().假设您稍后决定为以下内容添加新行为i=4:在第一种方法中,您只需添加一个新的特化; 在第二个版本中,您需要修改该功能foo().如果您以二进制形式发布了库,客户将不会满意.

专业化方法对第二种方法的偏好是开放/封闭原则的表现形式:代码应该是开放的,可以是扩展,关闭以进行修改.