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!