模板的全特化和偏特化

模板的全特化和偏特化

模板使用,对于某些特定类型,有更好的实现。

全特化

  1. template<typename T1, typename T2>
    
    class Widgte{
    
    ​    public:
    
    ​        T1 m;
    
    ​        T2  m2;
    
    };
    
    template<>
    
    class Widgte<int, double>{
    
    ​    public:
    
    ​        T1 m;
    
    ​        T2  m2;
    
    };
    
  2. 函数
    template<typename T1, typename T2>
    void function(T1 m, T2 m2) {}
    
    template<>
    void function(int m, double m2) {}
    

特化版本是不需要和主模版的结构保持一致的。

偏特化

将模板中部分模板参数指定为确定的类型。函数模板没有偏特化。

类:

模板参数个数上的偏特化(偏特化默认参数的顺序,从左至右或从右至左甚至随意放置都可以)

template<typename T1, typename T2>

class Widgte{

​    public:

​        T1 m;

​        T2  m2;

};

template<typename T1>

class Widgte<T1, double>{

​    public:

​        T1 m;

​        double  m2;

};

模板参数范围上的偏特化

template<typename T1>

class Widgte{

​    public:

​        T1 m;

​        T2  m2;

};

template<typename T1>

class Widgte<T1*>{

​    public:

​        T1 m;

​        double  m2;

};

特化模板类的标志就是类名后加<>。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top