Template 具体化

  • 具体化分为:
    • 全部具体化
    • 部分具体化
      • 个数具体化:指定模板中某个参数的类型
      • 范围具体化:参数代表数据类型、数据类型的指针

一定要注意下面的代码


  • 全部具体化

什么叫具体化。个人认为:声明对象指定某一具体的类型,选用具体的 class 或者 struct 

#include <iostream>
#include <string>


//先定义一个class模板,
template<typename T>
class Myvector{
private:
    T m_node;
public:
Myvector(){
        std::cout<<"this is template class"<<std::endl;
    }
//...
};

//具体化,当模板参数类型为double时选用该类

template<> class Myvector<double>{
    private:
        double m_node;
public:
    Myvector(){
        std::cout<<"this is double class"<<std::endl;
    }
//other function about double
};


//具体化,当模板参数类型为int时选用该类
template<> class Myvector<int>{
    private:
        int m_node;
public:
    Myvector(){
        std::cout<<"this is int class"<<std::endl;
    }
//other function about int 
};

int main(){
    Myvector<int> v_t;        //使用int类型的偏特化模板
    Myvector<double> v_f;     //使用double类型的偏特化模板
    Myvector<std::string> v_s;//因为没有string类型的偏特化,所以使用模板class
    return 0;
}
  • 部分具体化
    • 个数具体化,(感觉跟 全部具体化差不多,这个有默认参数,其他都相同)
#include <iostream>
#include <string>


//先定义一个泛化模板,
template<typename T,typename T2 = string>
class Myvector{
private:
    T m_node;
    T2 m_node1;
public:
Myvector(){
        std::cout<<"this is template class"<<std::endl;
    }
//...
};

//具体化,当模板参数类型其中一个为double时选用该类,另一个可以为任何类型

template<typename T> class Myvector<double,T>{
    private:
        double m_node;
        T m_node1;
public:
    Myvector(){
        std::cout<<"this is double class"<<std::endl;
    }
//other function about double
};
int main(){
    Myvector<double> v_f;
    Myvector<std::string> v_s;
    return 0;
}

 

    • 范围具体化
#include <iostream>
#include <string>


//先定义一个泛化模板,
template<typename T>
class Myvector{
private:
    T m_node;
public:
Myvector(){
        std::cout<<"this is template class"<<std::endl;
    }
//...
};

//具体化,当模板参数类型为指针时选用该类

template<typename T> class Myvector<T*>{
    private:
        T m_node1;
public:
    Myvector(){
        std::cout<<"this is T* class"<<std::endl;
    }
//other function pointer double
};

int main(){
    Myvector<double*> v_d_p;
    Myvector<double> v_d;
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值