Inferens Templat untuk Argumen Pembina: Meneroka Had
Dalam C , parameter templat boleh disimpulkan daripada hujah fungsi, membenarkan ringkas dan intuitif kod. Walau bagaimanapun, fungsi yang sama ini tidak tersedia untuk pembina kelas, menimbulkan persoalan tentang rasional asas.
Pembezaan utama terletak pada potensi untuk berbilang titik kemasukan ke dalam kelas. Tidak seperti fungsi dengan titik masuk tunggal yang ditentukan, pembina boleh ditambah dengan pembina salinan dan pengendali tugasan. Jika inferens templat dibenarkan untuk pembina, kesamaran akan timbul apabila membina objek melalui titik masuk alternatif ini.
Pertimbangkan contoh berikut:
template <typename obj> class Variable { obj data; public: Variable(obj d) { data = d; } }; int main() { int num = 2; Variable var(num); // interpreted as Variable<int> var(num) Variable other; // ambiguous: which template parameter type is inferred? other = var; // constructs via assignment operator, potentially causing inference issues return 0; }
Dalam senario ini, membuat kesimpulan jenis parameter templat daripada hujah pembina untuk var adalah mudah. Walau bagaimanapun, apabila cuba menggunakan pembina lalai untuk yang lain dan seterusnya memberikan var kepadanya, ia menjadi tidak jelas jenis parameter templat yang harus disimpulkan. Isu yang sama timbul jika penyalinan ctor untuk var dan lain-lain ditakrifkan, yang membawa kepada kemungkinan kekeliruan dan ralat.
Selain itu, terdapat keadaan yang membuat kesimpulan jenis parameter templat mungkin tidak diingini. Pertimbangkan fungsi generik yang menerima templat kelas sebagai hujah. Jika inferens dibenarkan, sukar untuk menentukan secara eksplisit jenis parameter templat, yang berpotensi menyekat fleksibiliti fungsi.
Kesimpulannya, sementara inferens templat untuk pembina kelas mungkin pada mulanya kelihatan menarik, cabaran dan kekaburannya. memperkenalkan melebihi potensi manfaatnya. Pendekatan sedia ada, yang membolehkan spesifikasi eksplisit parameter templat, memberikan kejelasan yang lebih besar dan mengelakkan kemungkinan isu inferens.
Atas ialah kandungan terperinci Mengapa C Tidak Menyokong Inferens Hujah Templat untuk Pembina Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!