Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan Menggunakan Fungsi Templat C?

Patricia Arquette
Lepaskan: 2024-11-21 14:40:11
asal
142 orang telah melayarinya

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

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!

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