zoukankan      html  css  js  c++  java
  • 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

    本人微信:xiaoshitou5854

  • 相关阅读:
    Unity入门教程(上)
    牛课堂算法直播题目
    使用3ds Max制作简单卧室
    Aizu_Insertion Sort
    C语言中的循环语句练习
    3ds Max 中的导航控件SteeringWheels入门介绍
    3ds Max 中的导航控件ViewCube入门介绍
    容易出错的 if 语句
    计蒜客2018 蓝桥杯省赛 B 组模拟赛(一)
    浅谈图的广度优先遍历
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/11751624.html
Copyright © 2011-2022 走看看