Mengapa Menggunakan Parameter Templat Berbeza untuk Kelas Rakan dalam Templat Bersarang?

Mary-Kate Olsen
Lepaskan: 2024-11-14 20:50:02
asal
834 orang telah melayarinya

Why Use Different Template Parameters for Friend Classes in Nested Templates?

Templat Kelas Rakan dalam Templat Bersarang

Pertimbangkan senario menentukan templat kelas untuk pepohon binari (BT) dan elemen dalam pepohon (BE). Apabila mengisytiharkan persahabatan antara kelas ini, mengapakah perlu menggunakan parameter templat yang berbeza untuk kelas rakan berbanding kelas yang mengandungi?

Dalam C , parameter templat tidak boleh membayangi satu sama lain. Dalam konteks templat bersarang, parameter templat templat dalam mesti mempunyai nama yang berbeza daripada parameter templat templat luar.

Sebagai contoh, dalam kod berikut:

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};
Salin selepas log masuk

Parameter templat U kelas rakan BT digunakan untuk membezakannya daripada parameter templat T kelas BE. Ini menyatakan bahawa BT ialah rakan BE tanpa mengira hujah templat BT.

Walau bagaimanapun, jika anda mengisytiharkan kelas rakan seperti berikut:

template<class T> friend class BT;
Salin selepas log masuk

Ini membayangkan bahawa sebarang instantiasi tertentu BT ialah rakan kepada mana-mana instantiasi BE tertentu. Untuk menentukan persahabatan yang lebih khusus, anda boleh menggunakan sintaks berikut:

template<typename T>
struct foo {
    friend class bar<T>;
};
Salin selepas log masuk

Ini menunjukkan bahawa bar ialah rakan foo hanya apabila hujah templat bar sepadan dengan hujah templat foo. Dalam kes anda, menggunakan bar kelas rakan; sudah memadai untuk menjalinkan hubungan persahabatan yang diingini.

Atas ialah kandungan terperinci Mengapa Menggunakan Parameter Templat Berbeza untuk Kelas Rakan dalam Templat Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan