Dalam C , adalah mungkin untuk mentakrifkan kelas sebagai rakan kepada kelas lain, memberikan akses kepada ahli persendirian tanpa mengira enkapsulasi . Walau bagaimanapun, apabila berurusan dengan templat kelas, memahami perhubungan rakan asas menjadi penting.
Pertimbangkan kod contoh:
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: ... };
Kod ini mentakrifkan kelas BE yang mewakili elemen pokok dan kelas BT yang mewakili pokok binari. Pada mulanya, percubaan dibuat untuk mengisytiharkan kelas rakan sebagai:
template<class T> friend class BT;
Walau bagaimanapun, pendekatan ini gagal. Untuk memahami sebabnya, adalah penting untuk mengenali bahawa parameter templat tidak boleh membayangi satu sama lain. Dalam templat bersarang, setiap tahap mesti mempunyai nama parameter templat yang unik.
Sebaliknya, pertimbangkan pengisytiharan ini:
template<class T> class BE { template<class U> friend class BT<U>; };
Ini menandakan bahawa BT ialah rakan BE tanpa mengira hujah templat BT. Setiap contoh BT, tanpa mengira jenis yang disimpannya, akan menjadi rakan BE.
Sebagai alternatif, jika pengisytiharan berikut digunakan:
template<class T> class BE { friend class BT<T>; };
Ini bermakna BT hanyalah sebuah rakan BE apabila hujah templat BT sepadan dengan BE. Dalam kes ini, sebagai contoh, BT
Dalam kes contoh pokok binari, mengisytiharkan kelas rakan sebagai kelas rakan BT
Atas ialah kandungan terperinci Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!