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!