gpt4 book ai didi

c++ - 模板特化还是条件表达式?

转载 作者:太空狗 更新时间:2023-10-29 19:46:29 25 4
gpt4 key购买 nike

我正在深入研究一个新项目,我用一堆模板和它们的特化来解决这个问题。现在,在一天没有编程之后,我发现自己在问是否真的值得多写几行代码。

问题是:特化的优势是什么?

这是:

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++ - 模板特化还是条件表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com