1. __STL_STATIC_TEMPLATE_MEMBER_BUG
如果编译器无法处理static member of template classes(模板类静态成员)就定义
。
即对于模板类中,模板类型不同时的静态变量不同。
template <typename T>
class test{
public:
static int _data;
}
int test<int>::_data=1;
int test<char>::_data=2;
2.__STL_CLASS_PARTIAL_SPECIALIZATION
如果编译器支持 partial specialization of class templates(模板类偏特化)就定义。
在模板类一般化设计之外(全特化),针对某些template做特殊设计。
“所谓的partial specialization的另一个意思是提供另一份template定义式,而其本身仍是templatized”
全特化就是所有的模板都为具体的类。
T* 特化允许用指针类型匹配的模式(也只能匹配指针类型)。
const T* 特化允许使用指向const的指针 类型匹配(也只能匹配指向const的指针)。
//一般化设计,非特化情况均使用这个
template <class I,class O>
struct test{
test() {
cout << "I, O" <<endl; }
};
//特殊化设计1(偏特化1)
template <class T>
struct test <T* ,T*> {
test() {
cout << "T* ,T*" << endl; }
};
//特殊化设计2(偏特化2)
template <class T>
struct test <const T* ,T*> {
test() {
cout << "const T* ,T*" << endl; }
};
//测试
int main() {
test<int, char> obj1; //I, O
test<int*, int*> obj2; //T*, T*
test<const int*, int*> obj3; //const T*, T*
}
3 __STL_FUNCTION_TMPL_PARTIAL_ORDER
如果编译器支持partial ordering of function templates或者说partial specialization of function templates就定义。
template <class T,class Alloc=alloc>
class vec {
public:
void swap