最为一个经验丰富的编程人员来说,必须要牢固掌握好两个以上的编程语言,才能真正满足工作中的需求。而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++全局函数相关内容就为大家介绍到这里。
【编辑推荐】