C++全局函數(shù)應(yīng)用指南
最為一個(gè)經(jīng)驗(yàn)豐富的編程人員來(lái)說(shuō),必須要牢固掌握好兩個(gè)以上的編程語(yǔ)言,才能真正滿足工作中的需求。而C++語(yǔ)言就是其中一個(gè)必要的選擇。我們?cè)谶@里可以通過(guò)對(duì)C++全局函數(shù)的基本概念有一個(gè)詳細(xì)的了解。
特別注意:類(lèi),全局函數(shù),類(lèi)的成員函數(shù)都可以特化,但是只有類(lèi)可以半特化,C++全局函數(shù)和類(lèi)的成員函數(shù)不可以半特化。
1 類(lèi)的特化和類(lèi)成員函數(shù)的特化
- template< typename T>
- class Widget1
- {
- public:
- void Fun1()
- {
- //generic implementation
- }
- };
- template< >
- class Widget1< int>
- {
- public:
- void Fun1()
- {
- }
- };
- template< >
- void Widget1< char>::Fun1()
- {
- //specialization
- }
- void main()
- {
- Widget1< char> w;
- w.Fun1();
- Widget1< int> w2;
- w2.Fun1();
- }
2 C++全局函數(shù)的特化和重載
- template< typename T1, typename T2>
- T1 Fun2(T2)
- {
- }
下面2個(gè)應(yīng)該是屬于重載
- template< typename T2>
- char Fun2(T2)
- {
- char c;
- return c;
- }
- template< typename T1>
- T1 Fun2(char)
- {
- }
C++全局函數(shù)的特化
- template< >
- char Fun2< char,int>(int)
- {
- char c;
- return c;
- }
- int main()
- {
- }
3 C++全局函數(shù)不能半特化,以下編譯失敗
- template < typename T1,typename T2> //原型1
- void Test(T1,T2)
- {
- }
- template < typename T1>
- void Test< T1,T1>(T1,T1)
- {
- }
- template< typename T1, typename T2> //原型2
- T1 Fun2(T2)
- {
- }
- //
- template< typename T2>
- int Fun2< int,T2>(T2)
- {
- }
- template< typename T1>
- T1 Fun2< T1,int>(int)
- {
- }
- template< typename T>
- T Fun2< T,T>(T)
- {
- }
- int main()
- {
- }
4 類(lèi)可以特化和半特化,但是特的成員函數(shù)像C++全局函數(shù)一樣,只能特化,不能半特化,
- template< typename T1, typename T2> struct Widget2
- {
- void Fun2()
- {
- //generic implementation
- }
- };
- template< typename T2>
- struct Widget2< char,T2>
- {
- void Fun2()
- {
- }
- };
- template< typename T2>
- struct widget2
- {
- void Fun2()
- {
- // class partial specialization
- }
- };
- //the class member funtion can not be partial specialization
以下的成員函數(shù)半特化,編譯失敗
- template< typename T2>
- void Widget2< char, T2>::Fun2()
- {
- //class member function partial specialization
- }
- int main()
- {
- }
C++全局函數(shù)相關(guān)內(nèi)容就為大家介紹到這里。
【編輯推薦】