• 模版的完全特化与偏特化


    模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。

    模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。

    模版特化:任何针对模版参数进一步进行条件限制设计的特化版本。 <<泛型思维>>

    完全特化:针对所有的模版参数进行特化。 <<c++ primer>>

    类模板:

    template<class T,class N> 
    class Template{}; 

    类模板全特化:

    template<> 
    class Template<int,char>{};

    类模板的偏特化:

    template<class T> 
    class Template<T,int>{};

    注意:函数模版不存在偏特化,只有类模版才能偏特化

    #include <iostream>
    using namespace std;
    
    template<typename T, typename N>
    class Test
    {
    public:
        Test( T i, N j ) : a(i), b(j)
        {
            cout<<"普通模板类"<< a <<' ' << b << endl;
        }
    private:
        T a;
        N b;
    };
    
    template<>
    class Test<int , char>
    {
    public:
        Test( int i, char j ) : a( i ), b( j )
        {
            cout<<"模版类全特化"<< a  << ' ' << b << endl;
        }
    private:
        int a;
        char b;
    };
    
    template <typename N>
    class Test<char, N>
    {
    public:
        Test( char i, N j ):a( i ), b( j )
        {
            cout<<"模版类偏特化"<< a<< ' ' << b << endl;
        }
    private:
        char a;
        N b;
    };
    
    //模板函数  
        template<typename T1, typename T2>  
    void fun(T1 a , T2 b)  
    {  
        cout<<"模板函数"<<endl;  
    }  
    
    //模版函数全特化  
    template<>  
    void fun<int ,char >(int a, char b)  
    {  
        cout<<"模版函数全特化"<<endl;  
    }  
    
    //函数不存在偏特化:下面的代码是错误的  
    // template<typename T2> 
    // void fun<char,T2>(char a, T2 b) 
    // { 
    //     cout<<"模版函数偏特化"<<endl; 
    // } 
    
    
    int main()
    {
        Test<double , double> t1( 0.1,0.2 );   //普通模版类
        Test<int , char> t2( 1, 'A' );   //模版类完全特化
        Test<char, bool> t3( 'A', true );  //模版类偏特化
        return 0;
    }
  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/renyuan/p/6377784.html
Copyright © 2020-2023  润新知