Rumah >pembangunan bahagian belakang >C++ >Bolehkah Rentetan Gaya C Digunakan sebagai Argumen Templat dalam C ?

Bolehkah Rentetan Gaya C Digunakan sebagai Argumen Templat dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-10-30 17:54:31611semak imbas

Can C-Style Strings Be Used as Template Arguments in C  ?

Bolehkah Rentetan Gaya C Menjadi Argumen Templat?

Percubaan anda untuk membuat instantiate templat menggunakan rentetan gaya C gagal dengan ralat disebabkan kepada penggunaan tidak sah rentetan literal sebagai hujah templat.

Walaupun rentetan gaya C tidak boleh berfungsi secara langsung sebagai hujah templat, terdapat pendekatan alternatif:

Gunakan Penunjuk ke Rentetan Malar

Satu penyelesaian adalah dengan menggunakan penuding kepada rentetan malar sebagai hujah templat:

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

char global_string[] = "String";

int main() {
    X<global_string> x;
    cout << x.GetString();
}

Kemas kini: String Literals sebagai Argumen Templat dengan C 11

Dengan C 11 dan kemudian, anda boleh menggunakan literal rentetan sebagai hujah templat dengan menggunakan pek aksara:

<code class="c++">template <char ...c>
struct X {
    const char (*GetString)() {
        return [](char*... s) { return s; }(c...);
    }
};

int main() {
    X<"S", "t", "r", "i", "n", "g"> x;
    cout << x.GetString();
}</code>

Atas ialah kandungan terperinci Bolehkah Rentetan Gaya C Digunakan sebagai Argumen 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