C++模板进阶:从类型到值的探索
1. 类模板的特化
在C++中,类型定义创建的是“类型别名”而非新类型。例如, typedef Stack<int> IntStack; 之后, IntStack 和 Stack<int> 是同一类型,可以相互赋值和使用。模板参数可以是任意类型,如浮点指针或整数栈:
Stack<float*> floatPtrStack; // 浮点指针栈
Stack<Stack<int> > intStackStack; // 整数栈的栈
需要注意的是,在两个右尖括号之间要加空格,否则会被当作 >> 运算符,导致语法错误。
类模板可以针对特定的模板参数进行特化。与函数模板的重载类似,类模板的特化可以针对特定类型优化实现,或者修正类模板实例化时某些类型的不当行为。但如果对类模板进行特化,必须对所有成员函数也进行特化。虽然可以特化单个成员函数,但一旦这样做,就不能再对整个类进行特化。
特化类模板时,要使用 template<> 开头声明类,并指定类模板特化的类型。这些类型作为模板参数,需紧跟在类名后。例如:
template<>
class Stack<std::string> {
...
};
C++模板进阶核心解析
超级会员免费看
订阅专栏 解锁全文
1108

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



