2.5 小结
模板函数为不同的模板实参定义了一个函数家族。
当你传递模板实参的时候,可以根据实参的类型来对函数模板进行实例化。
你可以显式指定模板参数。
你可以重载函数模板。
当重载函数模板的时候,把你的改变限制在:显式地指定模板参数。
一定要让函数模板的所有重载版本的声明都位于它们被调用的位置之前。
[1] 例如,如果在名字空间std定义了某种实参类型(如string),那么根据C++的查找规则,全局名字空间的max()模板和std max()模板都可以被找到。
[2] “one-entity-fits-all(一个实体适应所有类型)”的方法或许是可以实现的,但实际中几乎没有被实现过。因为所有的语言规则都是以“产生出不同实体”这个概念为基础的。
[3] 译注:也有人把deduction翻译成推演、推导、推断和推算。
[4] 这个限制主要是由函数模板在历史发展过程中的一个失误造成的。事实上,对于现今的C++编译器,要实现这个特性并没有技术障碍,C++在以后可能会提供这个特性(见13.3节)。
[5] 对于那些作用域局部于函数内部的值,你就不应该通过引用来返回该值(即返回一个指向该值的引用)。因为当程序离开这个函数的作用域之后,该值将不再存在,该引用也不再有效。
[6] 可以把演绎看成是重载解析的一部分——重载解析是一个不依赖于返回类型选择的过程,唯一的例外就是转型操作符成员的返回类型。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
时间: 2024-09-13 16:07:23