Templat Argumen Penilaian Malar
1. Mengapakah pengkompil tidak boleh menilai 'i' pada masa penyusunan?
Penilaian masa kompilasi memerlukan nilai 'i' diketahui sebelum program dilaksanakan. Walau bagaimanapun, dalam kod yang disediakan, 'i' ialah pembolehubah gelung yang berubah semasa pelaksanaan program. Pengkompil tidak boleh menentukan nilai 'i' pada masa penyusunan kerana ia adalah nilai yang ditetapkan secara dinamik.
2. Bolehkah saya mencapai objektif tanpa mengubah suai antara muka API?
Ya, anda boleh menggunakan pengkhususan templat untuk mencipta fungsi rekursif yang berulang melalui julat hujah templat. Sebagai contoh, anda boleh mencipta fungsi:
<code class="cpp">template<int i> void modify_recursive() { // Call modify with template argument 'i' modify<i>(); // Recursively call modify_recursive with the next template argument if (i < 10) { modify_recursive<i + 1>(); } }</code>
Memanggil 'ubah suai' dengan Argumen Bukan Malar
Untuk memanggil 'ubah suai' dengan nilai yang bukan pemalar masa kompilasi, anda boleh menggunakan teknik yang dipanggil pengaturcaraan meta templat. Satu pendekatan adalah untuk mencipta kelas templat yang mengambil objek fungsi sebagai hujah dan memanggilnya dengan nilai yang diingini:
<code class="cpp">template<typename F> struct InvokeWithParam { InvokeWithParam(F f, int param) : f(f), param(param) {} void operator()() { f(param); } F f; int param; };</code>
Anda kemudian boleh menghantar contoh InvokeWithParam sebagai hujah templat untuk diubah suai:
<code class="cpp">int var = 5; modify<InvokeWithParam{modify, var}>();</code>
Ini akan menggunakan fungsi ubah suai dengan nilai var.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Penilaian Malar dengan Argumen Templat Apabila Argumen Tidak Diketahui pada Masa Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!