在C 中,可以將類別定義為其他類別的友元,授予對私有成員的存取權限,而不管封裝如何。然而,在處理類別範本時,理解底層的好友關係變得至關重要。
考慮範例程式碼:
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... };
此程式碼定義了一個表示樹元素的類別 BE 和一個表示樹元素的類別 BT一棵二元樹。最初,嘗試將友元類別宣告為:
template<class T> friend class BT;
但是,這種方法失敗了。要理解原因,必須認識到模板參數不能相互影響。在嵌套模板中,每個層級必須具有唯一的模板參數名稱。
相反,請考慮以下聲明:
template<class T> class BE { template<class U> friend class BT<U>; };
這表示無論 BT 的模板參數如何,BT 都是 BE 的友元。 BT 的每個實例,無論其儲存的類型為何,都將是 BE 的友元。
或者,如果使用以下聲明:
template<class T> class BE { friend class BT<T>; };
這意味著 BT 只是一個當 BT 的模板參數與 BE 的匹配時,BE 的友元。在這種情況下,例如,BT
在二元樹範例中,將友元類別宣告為友元類別 BT
以上是如何在 C 中將類別模板宣告為友元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!