Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah String Literals Diluluskan sebagai Hujah Templat Bukan Jenis?

Bolehkah String Literals Diluluskan sebagai Hujah Templat Bukan Jenis?

Barbara Streisand
Barbara Streisandasal
2024-11-20 01:27:03832semak imbas

Can String Literals be Passed as Non-Type Template Arguments?

Melalui Huruf Rentetan kepada Parameter Templat Kelas Bukan Jenis

Soalan:

Bolehkah rentetan literal dihantar sebagai hujah bukan jenis kepada templat kelas, seperti dalam perisytiharan seperti my_class<"string">?

Jawapan:

Walaupun menghantar terus literal rentetan sebagai argumen templat bukan jenis tidak mungkin, terdapat penyelesaian yang hampir sama ia.

Anda boleh menggunakan parameter templat bukan jenis jenis const char* dan memberikannya const pembolehubah char[] dengan pautan statik. Pendekatan ini berkongsi persamaan dengan menghantar literal rentetan secara langsung.

Berikut ialah contoh yang boleh disusun:

#include <iostream>

template<const char *str>
struct cts {
    void p() { std::cout << str; }
};

static const char teststr[] = "Hello world!";

int main() {
    cts<teststr> o;
    o.p();
}

Kod di atas mengisytiharkan templat kelas cts dengan str parameter templat bukan jenis yang memerlukan pemalar penunjuk watak. Teststr pembolehubah, yang ditakrifkan dengan pautan statik, memegang literal rentetan dan dihantar ke instantiasi templat.

Kaedah ini ialah alternatif yang berdaya maju untuk menghantar literal rentetan secara terus sebagai argumen templat bukan jenis.

Atas ialah kandungan terperinci Bolehkah String Literals Diluluskan sebagai Hujah Templat Bukan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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