C++ 模板进阶

#include<iostream>
#include<string>
using namespace std;
namespace bite
{
    //1. 非类型模板参数
    // 定义一个模板类型的静态数组
    template<class T, size_t N = 10>
    class array
    {
    public:
        T& operator[](size_t index) { return _array[index]; }
        const T& operator[](size_t index)const { return _array[index]; }

        size_t size()const { return _size; }
        bool empty()const { return 0 == _size; }

    private:
        T _array[N];
        size_t _size;
    };
}
//2.函数模版特化
namespace hanshumobantehua{
    template<class T>
    bool Less(T left, T right) {
        return left < right;
    }
    template<>//函数模版特化
    bool Less<int*>(int* left, int* right) {
        cout << "int* left int* right" << endl;
        return *left < *right;
    }
}
//3.类模版特化
template<class T1,class T2>
class Date {
public:
    Date() { cout << "Date<T1 T2>"<<endl; }
};
template<>//类模版特化 全特化
class Date<int, double> {
public:
    Date() { cout << "Date<int double>"<<endl; }
};
template<class T>//偏特化  1.对类型的进一步限制
class Date<T*,T*> {
public:
    Date() { cout << "Date<T* T*>" << endl; }
};
template<class T> //2.特化部分参数
class Date<T, double> {
public:
    Date() { cout << "Date<T double>" << endl; }
};
template<class T>
class Date<T*, double> {
public:
    Date() { cout << "Date<T* double>" << endl; }
};//偏特化  1.对类型的进一步限制 2.特化部分参数
int main() {
    int a = 1, b = 2;
    int* pa =&b, *bp =&a;
    Date<double, string> d1;
    Date<int*, double> d2;
    //Date<int, int> d2;
    //Date<int*,int*>d3;
    //Date<double, double> d4;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值