欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++ 模板特化与局部特化

程序员文章站 2022-10-24 12:26:46
c++ 模板特化与局部特化 模板的由来是要处理泛化,也就是任何类型都可以处理。但是泛化的同时,如果针对某种特殊的类型,又更加效率的处理方法。c++提供针对特殊的类型,可以定义不同的处理方法。针对某种特殊类型去处理的方式就叫做特化。 特化分全部特化和局部特化 全部特化: 通过上面的例子可以看出,可以针 ......

c++ 模板特化与局部特化

模板的由来是要处理泛化,也就是任何类型都可以处理。但是泛化的同时,如果针对某种特殊的类型,又更加效率的处理方法。c++提供针对特殊的类型,可以定义不同的处理方法。针对某种特殊类型去处理的方式就叫做特化。

特化分全部特化和局部特化

全部特化:

template<typename t> class test{
    t i;
};
template<> class test<int>{
    int i;
};

通过上面的例子可以看出,可以针对类型int,定义一个新的处理。当外部使用时,穿进来的类型是int的话,就会进入到特化定义的类里。

局部特化种类1:把模板类型列表里,部分的类型,特化。

template<typename t, typename m> class test{
    t i;
    m m;
};
template<typename m> class test<bool, m>{
    int i;
};

上面的例子,把类型t特化了,类型m保留了,所以是部分特化。也就是当外部使用时,穿进来的t的类型是bool类型的话,就进入到特化定义的类里。

局部特化种类2:限定泛化类型,比如限定成指针。

template<typename t> class test{
    t i;
};
template<typename t> class test<t*>{
    t i;
};
template<typename t> class test<const t*>{
    t i;
};

上面的例子,把类型限定了,如果外部穿进来的是指针则有特殊的处理,如果穿进来的是const指针,则有另外的特殊处理。

c/c++ 学习互助qq群:877684253

c++ 模板特化与局部特化

本人微信:xiaoshitou5854