Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengisytiharkan Pembina Templat Kelas dengan Betul dalam C 20?
Mengatasi Parameter Templat Berlebihan dalam Pembina Templat Kelas dalam C 20
Dalam C 20, pengisytiharan pembina templat kelas telah melalui proses yang halus tetapi perubahan yang memberi kesan. Sebelum ini, pembina untuk templat kelas secara pilihan boleh memasukkan senarai parameter templat dalam pengisytiharnya, seperti yang dilihat dalam coretan kod berikut:
template<typename T> struct S { S<T>(); };
Amalan ini, bagaimanapun, kini ditamatkan dalam C 20. Kod di atas akan kini mengakibatkan ralat pengkompil dalam trunk gcc dengan -std=c 20. Walau bagaimanapun, ia masih akan menyusun dalam trunk clang dengan yang sama standard.
Rasional untuk Perubahan
Pengalihan keluar parameter templat berlebihan dalam pembina templat kelas menangani potensi sumber ralat. Dengan menghendaki penggunaan eksplisit nama kelas yang disuntik sebaliknya, niat mudah dikekalkan apabila mengisytiharkan pembina dalam templat kelas.
Kesan pada Kod Sedia Ada
Perubahan ini mungkin mempunyai implikasi untuk pangkalan kod sedia ada yang bergantung pada sintaks yang sah sebelum ini. Kod C 2017 yang sah seperti contoh di atas mungkin tidak lagi disusun di bawah standard C 20.
Resolusi untuk Kod Terjejas
Untuk menampung perubahan ini, sintaks alternatif berikut boleh digunakan:
template<typename T> struct S { S(); // Constructor declaration using the injected class name };
Sebagai alternatif, jika hujah templat tertentu diperlukan, pemuatan berlebihan pembina boleh digunakan:
template<typename T> struct S { S<T>(); // Constructor declaration with explicit template arguments S<int>(); // Overload for specific template argument };
Dengan mematuhi garis panduan sintaks ini, pangkalan kod boleh mengekalkan keserasian dengan standard C 20 yang dikemas kini.
Atas ialah kandungan terperinci Bagaimana untuk Mengisytiharkan Pembina Templat Kelas dengan Betul dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!