Rumah >pembangunan bahagian belakang >C++ >Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?

Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-11-14 13:50:02238semak imbas

How Can You Declare Class Templates as Friends in C  ?

Mengisytiharkan Templat Kelas sebagai Rakan: Penyelaman Lebih Dalam

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 akan menjadi kawan BE, tetapi bukan BE atau BE.

Dalam kes contoh pokok binari, mengisytiharkan kelas rakan sebagai kelas rakan BT; sudah memadai untuk menyediakan perhubungan yang diingini antara BT dan BE.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn