1 //声明 2 template<class T, class Sequence = deque<T>> 3 class queue; 4 //声明 5 template <class T,class Sequence> 6 bool operator==(const queue<T, Sequence>&x, const queue<T, Sequence>&y); 7 //声明 8 template <class T, class Sequence> 9 bool operator<(const queue<T, Sequence>&x, const queue<T, Sequence>&y); 10 //class queue 11 template <class T,class Sequence = deque<T>> 12 class queue 13 { 14 //<>为空模板参数列表 15 friend bool operator==<>(const queue&x, const queue&y); 16 friend bool operator< < >(const queue&x, const queue&y); 17 18 public: 19 ... 20 } 21 //友元函数类外实现 22 template<class T,class Sequence> 23 bool operator==(const queue<T, Sequence>& x, const queue<T, Sequence>& y) 24 { 25 return x.c == y.c; 26 } 27 template<class T,class Sequence> 28 bool operator<(const queue<T, Sequence>&x, const queue<T, Sequence>&y) 29 { 30 return x.c < y.c; 31 }
STL中的queue容器内部有一个deque,通过内含有deque,修改deque的接口,来实现一个queue,同理,stack也是类似。通过阅读源代码发现有友元函数函数类外实现,语法比较复杂,要提前告诉编译器很多东西。
再举一个简单的例子来说明友元函数类外实现
template<class Name,class Age> class Person; template<class Name,class Age> void showPerson(const Person<Name,Age>p); template<class Name, class Age = int> class Person { friend void showPerson<>(const Person<Name>p); public: Person(Name name, Age age) :m_name(name), m_age(age) {} private: Name m_name; Age m_age; }; template<class Name> void showPerson(const Person<Name>p) { cout << "name=" << p.m_name <<" "<< "age=" << p.m_age << endl; }
 
                    
                     
                    
                 
                    
                 
                
            
         
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号