• c++之模板


    1. 函数模板
    
    普通函数
    
    void Swap(int &, int &);
    
    模板函数
    
    template <typename T>
    
    void Swap(T &, T &);
    
    显示具体化,下面两个等价
    
    template<> void Swap<int>(int &, int &);
    
    template<> void Swap(int &, int &);
    
    注意:具体化将覆盖模板函数,普通函数将覆盖具体化和模板函数。
    
     
    
    显式实例化函数
    
    template void Swap<int>(int &, int &);
    
    注意:在同一编程单元中使用同一种类型的显式实例和显示具体化将出错。
    
     
    
    2.类模板
    
    多参数类型
    
    template <typename T1, typename T2>
    
    class Pair
    
    {
    
    private:
    
      T1 a;
    
      T2 b;
    
    };
    
     
    
    默认类型模板参数
    
    template <typename T1, typename T2 = int>
    
    class Topo
    
    {};
    
    类模板类型参数提供默认值,但不能为函数模板参数提供默认值。
    
     
    
    模板具体化
    
    1.隐式实例化
    
    A<int> *temp; 不会生成类的隐式实例化
    
    temp = new A<int>; 生成类的定义
    
     
    
    2.显式实例化
    
    声明必须位于模板定义所在的名称空间中,
    
    template class A<string, 100>;
    
     
    
    3.显式具体化
    
    通用的模板
    
    template <typename T>
    
    class SortedArray
    
    {};
    
    具体化
    
    template <> class SortedArray<char *>
    
    {};
    
     
    
    4.部分具体化
    
    普通模板
    
    template <typename T1, typename T2>
    
    class Topo
    
    {};
    
    部分具体化
    
    template <typename T1> class Topo<T1, int> {};
    
     
    
    3.模板类和友员
    
    非模板友员
    
    template <typename T>
    
    class hasFriend
    
    {
    
      friend void counts();
    
      friend void report(HasFriend<T>&);
    
    }
    
    模板类的约束模板友元函数
    
    template <typename T> void counts();
    
    template <typename T> void report(T &);
    
     
    
    template <typename TT>
    
    class hasFriend
    
    {
    
      friend void counts<TT>();
    
      friend void report<>(HasFriend<TT>&);
    
    }
    
    模板类的非约束模板友元函数
    
    template <typename T>
    
    class ManyFriend
    
    {
    
      template <typename C, typename D> friend void show2(C &, D &);
    
    };
  • 相关阅读:
    线程同步的几种实现方案
    关于java中三种初始化块的执行顺序
    java数组
    Codeblocks 17汉化
    聚焦天狗
    linux下搭建svn添加多个仓库(项目)
    使用Python在windows环境下获取Linux服务器的磁盘、内存等信息
    python smtplib使用163发送邮件 报错 554 DT:SPM
    防抖与节流
    js
  • 原文地址:https://www.cnblogs.com/kaishan1990/p/5468811.html
Copyright © 2020-2023  润新知