Mengapakah Saya Tidak Boleh Melepasi Pembolehubah Tidak Dimalarkan sebagai Argumen Templat dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-10-28 12:54:30
asal
662 orang telah melayarinya

Why Can't I Pass a Non-Constant Variable as a Template Argument in 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>
Salin selepas log masuk

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!

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