问题是:专业化有哪些优势?
这是:
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*/} };
以任何方式更好(更快的执行)
template <int i> class A { voID foo() { if (i==1) {/* something */} else if (i==2) {/* something else*/} else if (i==3) {/* even different*/} }};
?
编辑:
该代码是其他人使用的库的一部分.
我正在使用gcc 4.6.3但最终代码将与不同的编译器一起使用.
编辑:
这两段代码使用gcc 4.6.3生成相同的二进制文件.我无法测试完整的情况,因为我的实际代码远远无法使用.它似乎是一个原则,通用性,可重用性,可维护性等问题……
解决方法 速度不是这里的主要问题,但可扩展性是.专业化的优势在于,您可以使代码的客户端更容易添加foo()的新重载.假设您稍后决定为i = 4添加新行为:在第一种方法中,您只需添加一个新的特化;在第二个版本中,您需要修改函数foo().如果您以二进制形式发布了库,客户将不会满意.
专业化方法对第二种方法的偏好是开放/封闭原则的表现形式:代码应该是开放的,可以是扩展,关闭以进行修改.
总结以上是内存溢出为你收集整理的c – 模板特化或条件表达式?全部内容,希望文章能够帮你解决c – 模板特化或条件表达式?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)