Rumah >pembangunan bahagian belakang >C++ >Mengapakah Saya Tidak Boleh Melepasi Pembolehubah Tidak Dimalarkan sebagai Argumen Templat dalam C ?
Argumen Templat Mesti Dimalarkan
Dalam C , hujah templat mestilah ungkapan malar, yang boleh dinilai semasa penyusunan. Ini memastikan bahawa kod yang dijana oleh templat ditetapkan dan dioptimumkan pada masa penyusunan.
Mengapa Saya Tidak Boleh Melepasi Pembolehubah Tidak Malar sebagai Argumen Templat?
The sebab anda menerima ralat apabila cuba menghantar pembolehubah tidak tetap i sebagai hujah templat ialah pengkompil tidak boleh menilai nilainya pada masa penyusunan. Memandangkan nilai i hanya diketahui semasa pelaksanaan, ia tidak boleh digunakan sebagai parameter untuk pengkhususan templat.
Penyelesaian Alternatif untuk Mengulangi Argumen Templat
Untuk mencapai anda objektif tanpa mengubah antara muka API, satu pendekatan adalah dengan menggunakan pengkhususan templat. Ini melibatkan mencipta berbilang fungsi terlebih beban khusus untuk argumen templat yang berbeza. Dalam kes ini, anda akan menentukan fungsi individu ubah suai<1>, ubah suai<2>, ..., ubah suai<10> untuk mengendalikan nilai argumen yang berbeza.
Fungsi Templat Panggilan dengan Argumen Tidak Malar
Untuk memanggil fungsi ubah suai dengan argumen bukan malar, seperti VAR dalam anda kod, anda boleh menggunakan makro prapemproses atau fungsi pembantu yang mencipta dan memanggil pengkhususan templat yang sesuai secara dinamik. Walau bagaimanapun, pendekatan ini bukan standard C dan memerlukan berhati-hati untuk mengelakkan ralat masa kompilasi.
Contoh dengan Pengkhususan Templat
Berikut ialah contoh penyelesaian menggunakan pengkhususan templat:
<code class="cpp">template<> void modify<1>() { /* ... */ } template<> void modify<2>() { /* ... */ } // ... template<> void modify<10>() { /* ... */ }</code>
Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Melepasi Pembolehubah Tidak Dimalarkan sebagai Argumen Templat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!