Bagaimanakah Saya Boleh Mencapai Penilaian Malar dengan Argumen Templat Apabila Argumen Tidak Diketahui pada Masa Penyusunan?

Linda Hamilton
Lepaskan: 2024-11-03 10:05:29
asal
1001 orang telah melayarinya

How Can I Achieve Constant Evaluation with Template Arguments When the Argument Is Not Known at Compile Time?

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

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

Anda kemudian boleh menghantar contoh InvokeWithParam sebagai hujah templat untuk diubah suai:

<code class="cpp">int var = 5;
modify<InvokeWithParam{modify, var}>();</code>
Salin selepas log masuk

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!

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