Bolehkah Rentetan Gaya C Menjadi Hujah Templat dalam C?

Barbara Streisand
Lepaskan: 2024-10-30 03:07:29
asal
739 orang telah melayarinya

  Can C-Style Strings Be Template Arguments in C  ?

Rentetan Gaya C sebagai Argumen Templat

Dalam bidang pengaturcaraan C, anda mungkin menghadapi dilema: cuba menggunakan C- rentetan gaya sebagai hujah templat. Artikel ini membincangkan isu dan penyelesaian yang berpotensi.

Coretan kod berikut menggambarkan percubaan:

<code class="cpp">template <char *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<"String"> x;
    cout << x.GetString();
}
Salin selepas log masuk

Walau bagaimanapun, walaupun tiada ralat kompilasi dalam definisi kelas, instantiasi menghasilkan mesej ralat. Isunya terletak pada percubaan untuk menggunakan literal rentetan sebagai hujah templat, yang tidak disokong oleh pengkompil.

Penyelesaian mudah melibatkan menggantikan literal rentetan dengan penunjuk aksara:

<code class="cpp">char global_string[] = "String";

template <char const *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<global_string> x;
    cout << x.GetString();
}</code>
Salin selepas log masuk

Kod ini akan berjaya menyusun dan melaksanakan, membolehkan anda mendapatkan semula rentetan yang disimpan menggunakan kaedah GetString.

Perhatikan bahawa dengan kemunculan C 11, kini boleh menggunakan literal rentetan sebagai hujah templat menggunakan aksara bungkus. Walau bagaimanapun, untuk penyusun yang menyokong versi C terdahulu, penyelesaian yang dibentangkan di sini kekal sebagai pilihan yang berdaya maju.

Atas ialah kandungan terperinci Bolehkah Rentetan Gaya C Menjadi Hujah 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