c – 模板特化或条件表达式?
发布时间:2020-12-16 10:22:29 所属栏目:百科 来源:网络整理
导读:我深入研究了一个新项目,我用一堆模板和专业知识来解决这个问题.现在,在没有编程的一天之后,我发现自己在询问是否真的值得额外的代码行. 问题是:专业化有哪些优势? 这是: template int i class A {};template class A 1 { void foo() {/* something */} }
我深入研究了一个新项目,我用一堆模板和专业知识来解决这个问题.现在,在没有编程的一天之后,我发现自己在询问是否真的值得额外的代码行.
问题是:专业化有哪些优势? 这是: 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生成相同的二进制文件.我无法测试完整的情况,因为我的实际代码远远无法使用.它似乎是一个原则,通用性,可重用性,可维护性等问题…… 解决方法
速度不是这里的主要问题,但可扩展性是.
专业化的优势在于,您可以使代码的客户端更容易添加foo()的新重载.假设您稍后决定为i = 4添加新行为:在第一种方法中,您只需添加一个新的特化;在第二个版本中,您需要修改函数foo().如果您以二进制形式发布了库,客户将不会满意. 专业化方法对第二种方法的偏好是开放/封闭原则的表现形式:代码应该是开放的,可以是扩展,关闭以进行修改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |