繁体   English   中英

为什么我们使用模板而不是函数?

[英]Why do we use templates instead of functions?

只是寻找一些好的理由让我可以开始了解它们:/

避免重复除了不同类型之外在其他方面相同的代码。 有时您根本无法依赖隐式转换或升级,也无法将所有内容都填充到对象层次结构中。

模板是C ++的重要组成部分,如前所述,它们允许您开发类型通用的函数或类。 您在使用它们时指定类型。 如果没有其他原因,您应该学习模板,以了解boost和标准模板库。

这些库为您提供了一整套容器和算法,适用于任何内置或用户定义的类型。

例如,矢量类:

  vector<int> v(3);            // Declare a vector of 3 elements.
  v[0] = 7;
  v[1] = v[0] + 3;
  v[2] = v[0] + v[1];          // v[0] == 7, v[1] == 10, v[2] == 17  

这个类的客户端将其指定为int的向量,但它可以很容易地成为字符串或任何其他类型的向量。

你甚至知道模板是什么? 在编程语言概念的层次结构中,模板在比平面更高的平面上。 类(/ struct)或函数很好,但绑定到某些类型。 当你编写一个类向量时,它只适用于一种类型(及其子类,如果是一个类),因为你被迫直接命名项的类型。 但是使用模板,您不必关心项目的类型 - 它与向量实现无关,但您必须使用模板来实现此通用性。

话虽如此,C ++模板很难实现。 至少他们在那里,我欣赏他们在那里,并且在80年代它是全新的和现代的,但今天通用代码是可能的,没有例如模板错误消息的所有痛苦。 尽管如此,它们非常重要并且非常强大。

此外,C ++模板已经完成,并且具有大量空闲时间的足够聪明的程序员可以使用它进行令人兴奋的事情。 考虑一下:Boost(其中一个很重要的C ++库,很多人会说)主要是模板。 不是功能。 模板函数和类。 模板。

1)模板是一种简单的方法来保存自己复制/粘贴代码然后编辑它。

template<class T>
T Max(const T& a, const T& b){ return (a>b)?a:b: }

将使用int,double,string以及支持>符号的任何其他内容。

是的,您可以使用宏来完成,但是很多更复杂的模板示例都无法合理地完成。

2)容器类(向量,列表,映射)都是模板化的。

我的建议,你必须学会​​使用模板。 知道如何编写它们很有用,因为它们可以很有用。 (你可以用模板做很多非常怪异的事情,但你不需要那些东西)。

为了掌握模板,有助于对通用函数式编程有所了解。 根据手头的任务,通用编程可以大大简化关键功能的设计。 像Haskell和F#这样的语言(以及许多其他语言)将帮助您以更适合模板机制的方式思考问题。

一旦你对作为对象的函数的语义,类型参数,“递归迭代”,可以说,up值等等感到满意,C ++模板就变成了克服语言陷阱的问题。

你可以用模板做一些非常棒的魔术,但在业余时间开始玩它们绝对是一个好主意。 模板可以帮助简化问题的概念复杂性,但C ++的机制也可以使它们有点笨拙(C ++ 0x将解决一些大的烦恼)。 确保与您合作的任何人都对他们感到满意,这当然是个好主意。 您可能必须证明自己值得在专业环境中使用它们。 ;)

当我们需要处理不同的数据类型时,我们会重载函数。 这种方法增加了程序的大小。 缺点是不仅程序长度增加,而且在存储器中创建了更多的局部变量。 模板安全地克服了重载功能期间发生的所有限制,并为程序提供了更大的灵活性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM