Templat Kelas dengan Templat Rakan Kelas: Mempelajari Mekanik
Bayangkan membina kelas pokok binari (BT) dengan kelas elemen (BE ) menerangkan setiap nod, menyerupai struktur berikut:
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: ... };
Persediaan ini menghadapi sifat ingin tahu. Percubaan untuk mengisytiharkan rakan sebagai templat
Perbezaan ini berpunca daripada konsep pembayang templat. Parameter templat tidak boleh menduplikasi antara satu sama lain dalam skop templat bersarang. Akibatnya, nama parameter yang berbeza amat diperlukan untuk templat bersarang.
Pertimbangkan binaan berikut:
template<typename T> struct foo { template<typename U> friend class bar; };
Di sini, bar diisytiharkan sebagai rakan untuk menipu tanpa mengira hujah templatnya sendiri. Semua variasi bar, sama ada bar
Sebaliknya, pengisytiharan berikut:
template<typename T> struct foo { friend class bar<T>; };
Menyiratkan bahawa bar hanyalah rakan untuk ditipu apabila hujah templat bar sejajar dengan foo's. Hanya bar
Oleh itu, dalam senario tertentu anda, menggunakan bar kelas rakan tingkatan
Atas ialah kandungan terperinci Mengapa Saya Memerlukan Parameter Berasingan untuk Kelas Templat Rakan Di Dalam Templat Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!