Argumen Templat Lalai: Mengapa Terhad kepada Templat Kelas?
Walaupun kemudahan yang ditawarkan oleh argumen templat lalai, mereka secara anehnya terhad kepada templat kelas , menyebabkan pengaturcara tertanya-tanya mengapa ia tidak boleh digunakan pada templat fungsi ahli.
Argumen untuk Argumen Templat Lalai dalam Templat Fungsi
Pertimbangkan contoh my_class dengan ahli templat fungsi:
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
Secara intuitif, menyatakan jenis lalai untuk T dalam templat fungsi ahli masuk akal. Walau bagaimanapun, C menguatkuasakan sekatan bahawa argumen templat lalai hanya dibenarkan untuk templat kelas.
Sebab Di Sebalik Sekatan
Had tersebut berpunca daripada sebab sejarah apabila fungsi berdiri bebas dianggap lebih rendah daripada fungsi ahli. Dengan memaksa semua hujah templat disimpulkan daripada hujah fungsi, ia memastikan perlakuan yang konsisten.
Masa Depan Argumen Templat Lalai dalam Templat Fungsi
C 0x mengiktiraf batasan daripada sekatan sedia ada. Kemasukan argumen templat lalai untuk templat fungsi meningkatkan fleksibiliti pengekodan dan sejajar dengan gaya pengaturcaraan STL.
Menurut Bjarne Stroustrup, penyokong perubahan ini, larangan argumen templat lalai untuk templat fungsi ialah "suatu yang salah sisa." Beliau berhujah bahawa ia tidak semestinya membezakan fungsi berdiri bebas daripada fungsi ahli, menjadikannya mencabar untuk mengekalkan konsistensi dalam kod.
Faedah Argumen Templat Lalai dalam Templat Fungsi
Pengenalan hujah templat lalai ke dalam templat fungsi membolehkan pengalaman pengekodan yang lebih diperkemas dan intuitif. Sebagai contoh, pertimbangkan kes fungsi isihan:
<code class="cpp">template<typename Iterator, typename Comp = std::less< typename std::iterator_traits<Iterator>::value_type> > void sort(Iterator beg, Iterator end, Comp c = Comp()) { ... }</code>
Dengan argumen templat lalai untuk Comp, fungsi isihan boleh dipanggil dengan atau tanpa pembanding eksplisit, memudahkan sintaks dan meningkatkan kebolehbacaan kod.
Atas ialah kandungan terperinci Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas sahaja dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!