我一直在与朋友交谈,有些人完全同意应该使用C ++中的模板,其他人完全不同意。
一些好事是:
关于C ++模板,您能告诉我哪些其他好处?
你能告诉我有关C ++模板的哪些不好的事情?
编辑:我问这个的原因之一是我正在攻读考试,目前我正在讨论C ++模板的主题。所以我想更多地了解它们。
答案 0 :(得分:45)
模板是一种非常强大的机制,可以简化许多事情。然而,正确使用它们需要很多时间和经验 - 以确定何时使用它们。
对我而言,最重要的优势是:
for
和for_each
之间有什么区别)parallel_for
和其他类似STL的算法和容器)缺点:
export
支持(缺少)我强烈推荐以下书籍:
答案 1 :(得分:13)
从积极的方面来说,C ++模板:
允许进行类型
减少键入
帮助构建类型安全的代码
在编译时评估
可以提高性能(作为多态性的替代方案)
帮助构建非常强大的库
否定的一面:
如果不小心,可能会很快变得复杂
大多数编译器都会提供隐含的错误消息
使用/调试高度模板化的代码
至少有一个句法怪癖(>>运算符可能会干扰模板)
帮助使C ++很难解析
总而言之,应该仔细考虑何时使用模板。
答案 2 :(得分:4)
好点:强大;允许您:
坏点:强大;允许您:
模板极大地增加了可行的设计空间,这不一定是坏事,但它确实使它们更难以使用。模板代码需要维护人员不仅要了解语言功能,还要了解语言功能的设计后果;实际上,这意味着许多开发人员团队除了C ++模板中最简单,最制度化的应用程序之外的所有应用程序。
通常,模板会使语言更加复杂(并且难以正确实现!)。模板不是故意设计成图灵完整的,但它们无论如何 - 因此,即使它们可以做任何事情,使用它们可能会变得比它的价值更麻烦。
答案 3 :(得分:4)
My 2c相当消极。
C ++类型从未设计用于执行编译时计算。 使用类型实现计算目标的概念非常多 显然是一个黑客 - 而且,一个从来没有被寻求的,而是 偶然发现了
...
在代码中使用MP的回报是满足的时刻 解决了一个难谜。你做了100行的东西 否则就把200了。你磨蹭了 难以理解的错误消息,如果你需要的话 要将代码扩展到新案例,您将知道确切的3行 模板函数重载。当然,你的维护者会有 无限投资以实现同样的目标。
答案 4 :(得分:2)
应谨慎使用模板。
“糟糕的调试”和“难以阅读”并不是很好的论据,反对良好的模板使用和良好的抽象。
更好的否定论点会指向STL有很多“陷阱”的事实,并且STL已经涵盖的目的使用模板正在重新发明轮子。模板还会增加链接时间,这可能是某些项目的一个问题,并且在语法上有许多对人们来说都很神秘的特性。
但是通用代码重用,类型特征,反射,智能指针甚至元程序的积极因素往往超过负面因素。您必须确定的是,模板始终使用小心和谨慎。在每种情况下,它们都不是最佳解决方案,通常甚至不是第二或第三种最佳解决方案。
你需要有足够经验写作的人,他们可以避免所有的陷阱,并且在模板使事情变得复杂而不是帮助时会有很好的关注。
答案 5 :(得分:1)
我看不出它们如何难以阅读。什么是不可读的
vector <string> names;
例如?你会用什么替换它?
答案 6 :(得分:1)
我还没有提到的缺点之一是常规类和类模板实例化之间的细微语义差异。我能想到:
typedef
ed类型名称不会被模板类继承。typename
和template
个关键字。virtual
。这些事情通常可以克服,但它们很痛苦。
答案 7 :(得分:1)
有些人讨厌模板(我这样做),因为:
对我来说,模板就像一个带有集成火焰喷射器的电锯,它也可以发射手榴弹。在我生命中的一次,我可能有一个特定的需要。但大多数时候,我使用普通的锤子和简单的锯子来制造东西,而且我的工作做得很好。
答案 8 :(得分:0)
优势:可以创建通用数据类型。
缺点:代码膨胀
答案 9 :(得分:-1)
可重复使用的代码是使用模板制作的。它的应用与每个的概况一致。