最為一個經驗豐富的編程人員來說,必須要牢固掌握好兩個以上的編程語言,才能真正滿足工作中的需求。而C++語言就是其中一個必要的選擇。我們在這裡可以通過對C++全局函數的基本概念有一個詳細的了解。
特別注意:類,全局函數,類的成員函數都可以特化,但是只有類可以半特化,C++全局函數和類的成員函數不可以半特化。
1 類的特化和類成員函數的特化
- 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++全局函數的特化和重載
- template< typename T1, typename T2>
- T1 Fun2(T2)
- {
- }
下面2個應該是屬於重載
- template< typename T2>
- char Fun2(T2)
- {
- char c;
- return c;
- }
- template< typename T1>
- T1 Fun2(char)
- {
- }
C++全局函數的特化
- template< >
- char Fun2< char,int>(int)
- {
- char c;
- return c;
- }
- int main()
- {
- }
3 C++全局函數不能半特化,以下編譯失敗
- 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 類可以特化和半特化,但是特的成員函數像C++全局函數一樣,只能特化,不能半特化,
- 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
以下的成員函數半特化,編譯失敗
- template< typename T2>
- void Widget2< char, T2>::Fun2()
- {
- //class member function partial specialization
- }
- int main()
- {
- }
C++全局函數相關內容就為大家介紹到這裡。