2015-01-10 51 views
0

在升壓:: unordered_map,模板聲明如下:超負荷運營商之後的模板類型參數

template <class K, class T, class H, class P, class A> 
class unordered_map 
{ 

,並在模板的底部,有一個方法聲明如下:

friend bool operator==<K,T,H,P,A>(
      unordered_map const&, unordered_map const&); 

請問誰能告訴我爲什麼< K,T,H,P,A >在這裏需要?

謝謝!

+2

它結爲該操作者的特定'專業化=='。 –

回答

2

按照規定,行聲明作爲朋友operator==函數模板的一個特定的專業化declared previously as

template <class K, class T, class H, class P, class A> 
bool operator==(unordered_map<K, T, H, P, A> const&, 
    unordered_map<K, T, H, P, A> const&); 

如果刪除<K,T,H,P,A> -

friend bool operator==(unordered_map const&, unordered_map const&); 

然後,它反而會善待非模板函數operator==,與函數模板分開並且不同,這將是不正確的。

(相關standardese在§14.5.4[temp.friends]/P1找到。)