• Template的特性浅析


    今天在网上看资料时看到这篇文章,感觉不错,收藏下来!

    Template 是 泛型编程和STL中很基本的概念,下面让我们来看看它都有哪些新特性:



    1. 类模板显示特化(class template explicit specialization )
       template<class T>
        struct CTest{
              void operator() (){cout<<"CTest<T>"<<endl;}
        };
       
        struct CTest<char>{
             void operator() (){cout<<"CTest<char>"<<endl;}
       };
     
        struct CTest<int> {
             void operator() (){cout<<"CTest<int>"<<endl;}
       };
       void main()
       {
             CTest<double> test1;
             CTest<char> test2;
             CTest<int> test3;
     
             test1();
             test2();
             test3();
        }
    Answer:
      CTest<T>
      CTest<char>
      CTest<int>
     
     
    1.      类模板偏特化(class template partial specialization)
     template<class T1, class T2>
     struct CTest{
      CTest(){cout<<"T1,T2"<<endl;}
     };
     
     template<class T>
     struct CTest<T*, T*>{
     CTest(){cout<<"T*,T*"<<endl;}
    };
     
     template<class T>
     struct CTest<const T*, T*>{
     CTest(){cout<<"const T*,T*"<<endl;}
    };
     
    void main()
    {
        CTest<char,int> test1;
        CTest<int*,int*>test2;
        CTest<const int*,int*>test3;
    }
    Answer:
    T1,T2
    T*,T*
    const T*,T*
     
    2.      默认模板参数
    根据前一个模板参数T,设定下一个模板参数
     
    class alloc{};
    template<class T,class Alloc= alloc,size_t BufSize = 0>
    class queue{
    public:
       queue(){cout<<"queue"<<endl;}
    };
     
    template<class T, class sequence = deque<T>>
    class stack{
    public:
        stack(){cout<<"stack"<<endl;}
    private:
        sequence s;
    };
     
    void main()
    {
       stack<int> x;
    }
    Answer:
    deque
    stack
     
    4. 成员模板(member template)
    模板类的成员函数可以是一个模板
    template<class T>
    class vector{
    public:
    template<class I>
    void insert(I first,I last)
    {
       cout<<"insert"<<endl;
    }
    };
    int main()
    {
       int ia[5]={0,1,2,3,4};
       vector<int>x;
       x.insert(ia,ia+5);
    }
    Answer:
    insert
    5.      关键字 typename
    做为类型前的标识符号。
    指出SubType是T中定义的一个类型,因此ptr是一个指向T:SubType的指针。
    如果不加typename,表达式被认为是T中的静态成员SubType和ptr的乘积。
    template<class T>
    class MyClass
    {
    typename T::subType * ptr;
    };
    C++的一般规则是,除了以typename修饰以外,template内的任何标识符号都被视为一个值(value),而非一个类型(type)。
     
    typename的第二个作用:在模板声明中替换关键字class

    template<typename T> class MyClass ...


    原文出处:http://blog.csdn.net/liangjingbo/article/details/2212913

    Do one thing at a time,and do well.
  • 相关阅读:
    getBoundingClientRect()方法
    Sublime Text3 安装less
    less知识点总结(一)
    跨域知识(二)——JSONP
    面向过程和面向对象的区别(转)
    暴力+DP:买卖股票的最佳时机
    车的可用捕获量(3.26leetcode每日打卡)
    三维形体的表面积(3.25leetcode每日打卡)
    基础练习:FJ的字符串
    DP:打家劫舍
  • 原文地址:https://www.cnblogs.com/huiz/p/9610684.html
Copyright © 2020-2023  润新知