Mengapa Saya Memerlukan Parameter Berasingan untuk Kelas Templat Rakan Di Dalam Templat Kelas?

Barbara Streisand
Lepaskan: 2024-11-17 18:40:02
asal
228 orang telah melayarinya

Why Do I Need a Separate Parameter for a Friend Template Class Inside a Class Template?

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:
    ...
};
Salin selepas log masuk

Persediaan ini menghadapi sifat ingin tahu. Percubaan untuk mengisytiharkan rakan sebagai templat kawan kelas BT; gagal, memerlukan penggunaan parameter U yang berasingan (atau mana-mana parameter bukan T).

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;
};
Salin selepas log masuk

Di sini, bar diisytiharkan sebagai rakan untuk menipu tanpa mengira hujah templatnya sendiri. Semua variasi bar, sama ada bar, bar, bar, atau lain-lain, menjadi kawan kepada mana-mana instantiasi foo.

Sebaliknya, pengisytiharan berikut:

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

Menyiratkan bahawa bar hanyalah rakan untuk ditipu apabila hujah templat bar sejajar dengan foo's. Hanya bar akan dianggap sebagai rakan untuk menipu.

Oleh itu, dalam senario tertentu anda, menggunakan bar kelas rakan tingkatan; harus mewujudkan perhubungan rakan yang diingini dengan berkesan antara BE dan BT.

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!

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