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!