Bagaimanakah Fungsi Operator Rakan Mendayakan Penukaran Jenis Tersirat dalam Templat C?

Patricia Arquette
Lepaskan: 2024-11-17 04:29:03
asal
550 orang telah melayarinya

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

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();
    }
};
Salin selepas log masuk

Apabila templat dijadikan instantiated dengan int, pengkompil mencipta fungsi bukan templat:

test<int> operator+(test<int> const &, test<int> const &) {
    return test<int>();
}
Salin selepas log masuk

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, membenarkan ungkapan seperti:

A<3> a(4);
A<3> b = a + 5;
A<3> c = 5 + a;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan