Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi Templat C Menentukan Saiz Array?
Memahami Fungsi Templat "saiz tatasusunan"
Kod ini menggunakan fungsi templat untuk menentukan panjang tatasusunan, tetapi dalamannya kerja boleh menjadi misteri. Mari kita mendalami cara ia melaksanakan tugas ini.
Penyahmistifikasi Parameter
Parameter fungsi, T(&)[saiz], pada mulanya mungkin kelihatan membingungkan. Menyahkodnya dari dalam ke luar mendedahkan rujukan kepada tatasusunan saiz saiz yang tidak dinamakan dengan jenis T. Ini bermakna ia menerima rujukan kepada mana-mana tatasusunan, di mana jenis dan saiz tatasusunan ditentukan oleh parameter templat.
Potongan Templat dalam Tindakan
Apabila fungsi dipanggil dengan tatasusunan, seperti sebagai:
int a[10]; GetArrLength(a);
Pengkompil cuba membuat kesimpulan parameter templat. Untuk memadankan jenis parameter, T mestilah int dan saiz mestilah 10 (menghasilkan parameter yang merujuk tatasusunan 10 integer). Fungsi kemudian mengembalikan saiz, memberikan bilangan elemen dalam tatasusunan.
Mengatasi Isu Potensi
Kod ini mempunyai dua isu yang berpotensi. Pertama, saiz tidak boleh negatif, jadi jenis yang ditandatangani tidak boleh digunakan untuk parameter templat atau jenis pemulangan. Sebaliknya, jenis yang tidak ditandatangani harus digunakan, seperti std::size_t:
template<typename T, std::size_t Size> std::size_t GetArrLength(T(&)[Size]) { return size; }
Kedua, hasil fungsi bukanlah ungkapan tetap, walaupun sifat saiz tatasusunan yang tetap. Untuk kebolehgunaan yang dipertingkatkan, ungkapan tetap diutamakan:
template <std::size_t N> struct type_of_size { typedef char type[N]; }; template <typename T, std::size_t Size> typename type_of_size<Size>::type& sizeof_array_helper(T(&)[Size]); #define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
Menggunakan teknik ini, anda boleh mendapatkan semula saiz tatasusunan sebagai ungkapan malar:
int a[10]; const std::size_t n = sizeof_array(a); // constant-expression!
Atas ialah kandungan terperinci Bagaimanakah Fungsi Templat C Menentukan Saiz Array?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!