有模板類朋友的類別模板:深入研究機制
想像一下用元素類(BE)構造一個二叉樹(BT)類別)描述每個節點,類似於以下結構:
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: ... };
此設定遇到了一個奇怪的怪癖。嘗試將好友宣告為 template
這種差異源自於模板陰影的概念。模板參數在嵌套模板範圍內不能互相重複。因此,不同的參數名稱對於嵌套模板是必不可少的。
考慮以下構造:
template<typename T> struct foo { template<typename U> friend class bar; };
這裡,bar 被宣告為 foo 的友元,無論它自己的模板參數為何。 bar 的所有變體,無論是 bar
相反,以下聲明:
template<typename T> struct foo { friend class bar<T>; };
當 bar 的模板參數與 foo 的模板參數對齊時,暗示 bar 是 foo 的友元。僅長條
因此,在您的特定場景中,採用朋友類 bar
以上是為什麼類別模板內的好友模板類別需要單獨的參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!