Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan Menggunakan Fungsi Templat C?

Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan Menggunakan Fungsi Templat C?

Patricia Arquette
Patricia Arquetteasal
2024-11-21 14:40:11139semak imbas

How Can I Get the Size of an Array Using a C   Template Function?

Bagaimanakah fungsi templat "saiz tatasusunan" ini berfungsi?

Fungsi templat ini, GetArrLength, direka bentuk untuk menentukan panjang tatasusunan. Ia mencapai ini dengan memanfaatkan pengetahuan tentang saiz dan jenis tatasusunan, yang ditetapkan sebagai parameter templat jenis T dan saiz int, masing-masing.

Fungsi ini merujuk kepada tatasusunan jenis T dan saiz saiz sebagai parameter input. Rujukan ini diisytiharkan menggunakan sintaks T(&)[saiz], yang menandakan bahawa parameter harus menjadi rujukan kepada tatasusunan jenis T dengan saiz saiz yang tetap.

Apabila dipanggil, pengkompil cuba untuk menyimpulkan parameter templat berdasarkan jenis dan saiz tatasusunan yang dihantar masuk. Contohnya, jika kita memanggil GetArrLength dengan tatasusunan integer bernama a dengan saiz 10, pengkompil akan membuat kesimpulan bahawa T ialah int dan saiz ialah 10, dan fungsi itu akan mengembalikan nilai 10.

Walau bagaimanapun, terdapat had tertentu pada pelaksanaan fungsi GetArrLength. Pertama, penggunaan integer yang ditandatangani untuk parameter templat dan jenis pulangan boleh membawa kepada isu dengan saiz tatasusunan negatif. Untuk tujuan praktikal, anda dinasihatkan untuk menggunakan jenis yang tidak ditandatangani, seperti std::size_t, untuk kedua-dua parameter templat dan jenis pemulangan untuk mengelakkan sebarang tingkah laku yang tidak dijangka.

Selain itu, hasil fungsi bukanlah ungkapan tetap , walaupun saiz tatasusunan sememangnya tetap. Untuk menangani had ini, penyelesaian yang lebih mantap wujud yang boleh memberikan hasil yang tetap, seperti blok kod berikut:

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))

Teknik ini menjana hasil yang tetap dengan mengekodkan saiz tatasusunan ke dalam saiz jenis menggunakan pendekatan metaprogramming templat. Ia memastikan bahawa hasilnya tidak dinilai secara dinamik dan kekal sebagai ungkapan yang berterusan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan Menggunakan Fungsi Templat 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