Bolehkah Rentetan Gaya C Digunakan sebagai Argumen Templat dalam C ?

Susan Sarandon
Lepaskan: 2024-10-30 17:54:31
asal
570 orang telah melayarinya

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();
}
Salin selepas log masuk

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

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!

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