Penukaran Jenis Tersirat dalam Templat dengan Fungsi Operator Rakan
Untuk menggunakan penukaran jenis tersirat dengan templat, teknik yang kerap digunakan ialah takrifan fungsi rakan bukan ahli dalam takrifan kelas templat.
Dalam C , fungsi templat tidak dibuat seketika sehingga ia digunakan dengan jenis tertentu. Semasa resolusi beban lampau, pengkompil menyimpulkan jenis parameter templat dan menghapuskan sebarang templat yang tidak betul-betul sepadan dengan jenis hujah, tidak termasuk penukaran tersirat.
Penyelesaian terletak pada menggunakan fungsi pengendali rakan yang ditakrifkan dalam templat definisi kelas. Untuk setiap instantiasi templat, pengkompil menjana fungsi bukan templat percuma dengan tandatangan yang sepadan dengan jenis yang digantikan.
Sebagai contoh, pertimbangkan:
template <typename T> class test { friend test operator+(test const &, test const &) { return test(); } };
Apabila templat dijadikan instantiated dengan int, pengkompil mencipta fungsi bukan templat:
test<int> operator+(test<int> const &, test<int> const &) { return test<int>(); }
Fungsi ini, tersedia melalui carian bergantung hujah, melakukan penukaran tersirat pada hujahnya. Ini kerana ia ditakrifkan di luar kelas templat dan tidak memerlukan padanan jenis yang tepat semasa peleraian beban lampau.
Oleh itu, penukaran jenis tersirat menjadi mungkin apabila memanggil operator pada objek ujian jenis
A<3> a(4); A<3> b = a + 5; A<3> c = 5 + a;
Atas ialah kandungan terperinci Bagaimanakah Fungsi Operator Rakan Mendayakan Penukaran Jenis Tersirat dalam Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!