• 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 &);
    
    };
  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/kaishan1990/p/5468811.html
Copyright © 2020-2023  润新知