当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C++模板有哪些优点和缺点?》经验,为你挑选了3个好方法。

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

一些好事是:

它们使用起来更安全(类型安全).

它们是对API进行一般化的好方法.

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

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

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



1> Anonymous..:

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

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

减少代码的重复(通用容器,算法)

减少高级代码的重复(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支持(缺乏)

错误信息可能不那么神秘(经过一些学习,你可以找到你需要的东西,但仍然......)

我强烈推荐以下书籍:

C++模板:David Vandevoorde和Nicolai Josuttis的完整指南(对模板主题的全面介绍)

现代C++设计.通用编程和设计模式由Andrei Alexandrescu应用(使用模板简化代码,使开发更容易并使代码对变更具有鲁棒性的不太知名的方法是什么)

由David Abrahms和Aleksey Gutov编写的C++模板元编程(再次 - 使用模板的不同方式)

来自Wikibooks的更多C++成语提出了一些不错的想法.



2> Colin..:

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

允许类型的泛化

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

帮助构建类型安全的代码

在编译时进行评估

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

帮助构建非常强大的库

在消极方面:

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

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

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

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

帮助使C++很难解析

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


有了>>运算符的怪癖现在已经消失了,谢天谢地.

3> Ofek Shilon..:

我的2c相当消极。

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

..

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


我确实同意,我发现自己每天都在使用模板而不是优势编码劣势,特别是在第二点。
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有