zoukankan      html  css  js  c++  java
  • [C++再学习系列] 函数模板和类模板

    函数模板和类模板

    C++ 提供类模板和函数模板。函数模板允许重载 ,而类模板不允许重载(类无重载概念)。类模板可以进行全特化和偏特化,而函数模板仅能够全特化 。因此,写一个看似函数模板偏特化的函数模板实际上是在写一个单独的主函数模板!

    由于函数模板可以重载,因此存在重载决议。但是记住,函数模板特化并不参与重载。只有在某个主模板函数被重载决议选中的前提下,其特化版本才有可能被使用。

    因此,如果想要将一个主模板特化,同时希望该特化版本能够参与重载决议,那么应该将使用普通函数而不是特化版本。(这是因为普通函数比函数模板优先级更高)如果希望函数模板可以被特化、偏特化,应该使用类模板来封装。类模板可以被偏特化。

    总结:函数模板不能偏特化只能重载 ,函数模板的特化并不参与重载决议。这和直觉有点不同。

    注意:

    1.         对于模板函数。不能使用默认参数。默认参数仅仅对模板类有效。

    2.         在编写模板函数的过程中。函数体内所有使用到的类型都必须是已知的 ( 当然对于 template 中的参数类型。在函数体内也属已经的类型 ) 。就是说不能在函数体内使用新定义的类型。如果使用像迭代器这样的特化类型,需要使用 typename 做限定。如 typename vector<T>::iterator it;

    ---------------------------------------------------

    兄弟的公司:立即购--手机购物,诚信网购

    兄弟的公司:立即团

    欢迎转载,请注明作者和出处

  • 相关阅读:
    整除理论
    洛谷P1440 求m区间内的最小值
    洛谷 P1865 A % B Problem
    CF776B Sherlock and his girlfriend
    POJ2262 Goldbach's Conjecture
    BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头(筛法思想)
    质数合数相关
    CPU缓存会分为一级缓存L1、L2、L3
    mysql+redis
    IntelliJ IDEA下的使用git
  • 原文地址:https://www.cnblogs.com/zhenjing/p/template_function_class.html
Copyright © 2011-2022 走看看