Rumah >pembangunan bahagian belakang >C++ >`typename` lwn. `class` dalam Templat C: Apakah Perbezaannya?
Memahami Nuansa ""typename"" vs ""class" Parameter Templat
Dalam bidang templat C, anda mungkin menghadapi dua nampaknya boleh ditukar ganti pengisytiharan:
template <typename T>
dan
template <class T>
Walaupun ia kelihatan serupa, terdapat perbezaan yang ketara antara kedua-dua kata kunci ini.
Penggunaan Asas:
Untuk menentukan templat mudah, kedua-dua "typename" dan "class" menghasilkan setara hasil:
template <class T> class Foo { };
berfungsi sama dengan:
template <typename T> class Foo { };
Jenis Bergantung:
Apabila merujuk jenis bersarang yang bergantung pada templat lain parameter, kata kunci "typename" menjadi penting contoh:
template <typename param_t> class Foo { typedef typename param_t::baz sub_t; };
Di sini, "typename" digunakan untuk menyelesaikan jenis "baz" bersarang dengan betul dalam parameter templat "param_t".
Templat Templat:
Kes unik timbul apabila menentukan "templat templat." Dalam keadaan sedemikian, kata kunci "kelas" ialah wajib:
template <template <typename, typename> class Container, typename Type>
Tidak seperti "nama taip", "kelas" ialah pilihan eksklusif untuk mengisytiharkan templat templat.
Semerta Eksplisit:
The kata kunci "kelas" adalah penting apabila menyatakan secara eksplisit a templat:
template class Foo<int>;
Kesimpulan:
Walaupun "nama taip" dan "kelas" mungkin kelihatan sinonim untuk pengisytiharan templat umum, adalah penting untuk mengenali aplikasi tersendiri mereka dalam khusus senario: jenis bergantung, templat templat dan instantiasi eksplisit. Dengan memahami nuansa ini, anda boleh memanfaatkan kuasa ekspresif penuh templat C.
Atas ialah kandungan terperinci `typename` lwn. `class` dalam Templat C: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!