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

Susan Sarandon
Lepaskan: 2024-10-25 04:44:29
asal
293 orang telah melayarinya

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

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

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!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!