Rumah >pembangunan bahagian belakang >C++ >Bolehkah Rentetan Gaya C Menjadi Hujah Templat dalam C?

Bolehkah Rentetan Gaya C Menjadi Hujah Templat dalam C?

Barbara Streisand
Barbara Streisandasal
2024-10-30 03:07:29750semak imbas

  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();
}

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>

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!

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