Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah std::array dengan Saiz Tidak Diketahui dihantar ke Fungsi Secara Terus?

Bolehkah std::array dengan Saiz Tidak Diketahui dihantar ke Fungsi Secara Terus?

Susan Sarandon
Susan Sarandonasal
2024-10-25 04:44:29294semak imbas

Can std::array with Unknown Size be Passed to a Function Directly?

Melalui std::array Saiz Tidak Diketahui kepada Fungsi

Dalam contoh kod ini, matlamatnya ialah untuk mencipta fungsi yang mengambil std::array of jenis yang diketahui tetapi saiz yang tidak diketahui. Ini adalah senario biasa yang boleh timbul dalam pelbagai tugas pengaturcaraan.

<code class="cpp">// made up example
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}

// lets imagine these being full of numbers
std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

Walau bagaimanapun, semasa pembangun mencari penyelesaian, mereka menemui cadangan untuk menggunakan templat fungsi. Walaupun templat fungsi boleh menyelesaikan masalah ini, ia mungkin memperkenalkan kerumitan tambahan dan tidak selalu merupakan pendekatan yang paling berkesan.

Persoalan yang dikemukakan ialah sama ada terdapat cara yang lebih mudah untuk menyelesaikan tugasan ini, sama seperti cara seseorang itu berfungsi dengan tatasusunan gaya C biasa. Malangnya, jawapannya negatif. Dalam C , tiada cara langsung untuk menghantar tatasusunan saiz yang tidak diketahui kepada fungsi tanpa menggunakan templat fungsi.

Untuk membolehkannya, seseorang mesti menggunakan templat fungsi, seperti yang digambarkan di bawah:

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Templat fungsi ini boleh digunakan dengan tatasusunan dalam sebarang saiz, seperti yang ditunjukkan dalam contoh langsung berikut: https://godbolt.org/z/sV49sK

Atas ialah kandungan terperinci Bolehkah std::array dengan Saiz Tidak Diketahui dihantar ke Fungsi Secara Terus?. 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