C++类模板特化全总结
生活随笔
收集整理的這篇文章主要介紹了
C++类模板特化全总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//基礎模板一
template<typename T1, typename T2>
class TestTemplateA {
public:void Func() {printf("TestTemplateA: base\n");}
};//注意下面這個模板并不是【基礎模板一】的偏特化,編譯會報錯,因為它屬于【基礎模板一】的一種情況
//特化或偏特化是指對類名后面的模板類型參數具體指定,而不是對template<>里的參數的具體指定
//template<bool, typename T>
//class TestTemplateA {
//public:
// void Func() {
// printf("TestTemplateB: base\n");
// }
//};//偏特化1
template<typename T2>
class TestTemplateA<int, T2> {
public:void Func() {printf("TestTemplateA: 偏特化1\n");}
};//偏特化2
template<typename T1, typename T2>
class TestTemplateA<T1*, T2> {
public:void Func() {printf("TestTemplateA: 偏特化2\n");}
};//偏特化3
template<typename T1, typename T2>
class TestTemplateA<T1*, T2*> {
public:void Func() {printf("TestTemplateA: 偏特化2\n");}
};//偏特化4
template<typename T1, typename T2>
class TestTemplateA<T1*, T2&> {
public:void Func() {printf("TestTemplateA: 偏特化3\n");}
};//全特化
template<>
class TestTemplateA<int, float> {
public:void Func() {printf("TestTemplateA: 全特化\n");}
};//基礎模板二
template<bool, typename T>
class TestTemplateB {
public:void Func() {printf("TestTemplateB: base\n");}
};//偏特化
template<typename T>
class TestTemplateB<false,T> {
public:void Func() {printf("TestTemplateB: 偏特化\n");}
};//全特化
template<>
class TestTemplateB<false, float> {
public:void Func() {printf("TestTemplateB: 全特化\n");}
};/*
* 基礎模板三
* 模板參數不僅可以傳類型,也可以像函數一樣傳參數
*/
template<bool arg1, int arg2>
class TestTemplateC {
public:void Test() {printf("TestTemplateC: base, arg1= %d, arg2=%d\n", arg1, arg2);}
};//偏特化
template<int arg2>
class TestTemplateC<false, arg2> {
public:void Test() {printf("TestTemplateC:偏特化, arg2 = %d\n", arg2);}
};//全特化,無意義
template<>
class TestTemplateC<false, 128> {
public:void Test() {printf("TestTemplateC:全特化\n");}
};
總結
以上是生活随笔為你收集整理的C++类模板特化全总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 类模板中友元函数问题
- 下一篇: C++模板特化的一个BUG?