C++模板有哪些优点和缺点?

fms*_*msf 26 c++ templates

我一直在和朋友聊天,有些人完全同意应该使用C++中的模板,其他人完全不同意.

一些好事是:

  • 它们使用起来更安全(类型安全).
  • 它们是对API进行一般化的好方法.

关于C++模板,您能告诉我哪些其他好处?

你能告诉我有关C++模板的哪些不好的事情?

编辑:我问这个的原因之一是我正在攻读考试,目前我正在讨论C++模板的主题.所以我想更多地了解它们.

Ano*_*ous 47

模板是一种非常强大的机制,可以简化许多事情.然而,正确使用它们需要很多时间和经验 - 以确定何时使用它们是合适的.

对我来说,最重要的优势是:

  • 减少代码的重复(通用容器,算法)
  • 减少高级代码的重复(MPL和Fusion)
  • 静态多态(= performance)和其他编译时计算
  • 基于策略的设计(灵活性,可重用性,更容易更改等)
  • 免费提高安全性(即通过Boost装置进行尺寸分析,静态断言,概念检查)
  • 函数式编程(Phoenix),懒惰评估,表达式模板(我们可以在C++中创建特定于域的嵌入式语言,我们有很棒的Proto库,我们有Blitz ++)
  • 日常生活中使用的其他不那么引人注目的工具和技巧:
    • STL和算法(for和之间有什么区别for_each)
    • bind,lambda(或Phoenix)(编写更清晰的代码,简化事情)
    • 提升功能(使写回调变得更容易)
    • 元组(如何通用散列元组?以Fusion为例......)
    • TBB(parallel_for和其他类似STL的算法和容器)
  • 你能想象没有模板的C++吗?是的,我可以在早期因为编译器限制而无法使用它们.
  • 你会在没有模板的情况下用C++编写吗?不,因为我会失去上面提到的许多优点.

缺点:

  • 编译时间(例如扔Sprit,Phoenix,MPL和一些Fusion,你可以去喝杯咖啡)
  • 人们谁可以使用和理解模板并不常见(和这些人都是有用的)
  • 人们谁认为他们可以使用和理解模板是很常见(和这些人都是危险的,因为它们可以使地狱的代码.但大部分的一些教育/指导后,将加入在之前的点中提到的组)
  • 模板export支持(缺乏)
  • 错误信息可能不那么神秘(经过一些学习,你可以找到你需要的东西,但仍然......)

我强烈推荐以下书籍:

  • 您忘了提及生成的代码的大小也会增加。这就是为什么模板很少在存储容量非常低的嵌入式设备中使用(除非您在源文件中定义模板(即使其只能在该源文件内部访问,而不能被任何其他导入源文件头的文件访问)。 (2认同)

Col*_*lin 15

从积极的方面来说,C++模板:

  • 允许类型的泛化

  • 减少需要键入的冗余代码量

  • 帮助构建类型安全的代码

  • 在编译时进行评估

  • 可以提高性能(作为多态性的替代)

  • 帮助构建非常强大的库

在消极方面:

  • 如果不小心,可能会很快变得复杂

  • 大多数编译器都会提供神秘的错误消息

  • 使用/调试高度模板化的代码可能很困难

  • 至少有一个句法怪癖(>>运算符可以干扰模板)

  • 帮助使C++很难解析

总而言之,应该仔细考虑何时使用模板.

  • 有了>>运算符的怪癖现在已经消失了,谢天谢地. (3认同)

Ofe*_*lon 6

我的2c相当消极。

从来没有将C ++类型设计为执行编译时间计算。使用类型来实现计算目标的概念非常明显,这是一个hack –而且,从未有人寻求过,但是偶然发现了

..

在您的代码中使用MP的回报是解决了一个难题之后的满足感。你做的东西,在100线否则将采取200您研磨通过自己的方式难以理解的错误消息去的地步,如果一个点需要的代码扩展到一个新的情况下,你会知道确切的三线模板功能超载。您的维护者当然必须无限地投入更多资金才能实现同样的目标。

  • 我确实同意,我发现自己每天都在使用模板而不是优势编码劣势,特别是在第二点。 (2认同)