目录
非类型模板参数
模板参数分 类型形参 和 非类型形参
类型形参:出现模板参数列表中,跟在class或者typename之类的参数类型名称
非类型形参:用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当常量来使用
namespace A
{
template<class T,size_t N = 10>
class arr
{
public:
T& operator[](size_t n) { return _arr[n]; }
size_t size() const { return _size; }
bool empty() const { return 0 == _size; }
private:
T _arr[N];
size_t _size;
};
}
其中N就是非类型形参
浮点数,类对象,字符串不可以当非类型模板参数
非类型的模板参数必须在编译期就能确认结果
模板的特化
通常情况下,使用模板可以实现一些与类型无关的代码,但是对于特殊类型也需要特殊处理
class Num
{
public:
Num(int a):_a(a){}
bool operator<(Num& b) { return _a < b._a; }
private:
int _a;
};
template<class T>
bool Less(T left, T right)
{
return left < right;
}
int main()
{
cout << Less(1, 2) << endl;//正确
Num n1(1);
Num n2(2);
cout << Less(n2, n1) << endl;//正确
Num* p2 = &n1;
Num* p1 = &n2;
cout << Less(p2, p1) << endl;//这里比的是地址 不是我们要的
return 0;
}

最低0.47元/天 解锁文章
796

被折叠的 条评论
为什么被折叠?



