Rumah > pembangunan bahagian belakang > C++ > Mengapa Potongan Hujah Templat C Saya Gagal dalam Konteks Tidak Terdeduksi?

Mengapa Potongan Hujah Templat C Saya Gagal dalam Konteks Tidak Terdeduksi?

Barbara Streisand
Lepaskan: 2024-12-06 09:45:13
asal
940 orang telah melayarinya

Why Does My C   Template Argument Deduction Fail in Nondeduced Contexts?

Kegagalan Potongan Argumen Templat: Memahami Konteks Tidak Terdeduksi

Dalam kod anda, anda telah menentukan dua fungsi (temp dan temp2) yang bertujuan untuk menyimpulkan hujah templat berdasarkan jenis parameter. Walau bagaimanapun, anda menghadapi ralat pengkompil yang menyatakan bahawa ia tidak dapat menyimpulkan hujah ini.

Isu ini berpunca daripada penggunaan kata kunci nama taip dalam definisi fungsi:

// Example 1
template <class A>
A temp(typename S<A>::type a1)

// Example 2
template <class A, class B>
B temp2(typename S<A>::type a1, B a2)
Salin selepas log masuk

Apabila menggunakan parameter templat templat , nama taip diperlukan untuk merujuk kepada nama bergantung dalam kelas templat. Walau bagaimanapun, ini tidak berlaku dalam konteks fungsi anda, di mana S::type hanyalah jenis tidak bergantung.

Dalam C , potongan hujah templat berlaku apabila parameter templat digunakan dalam konteks yang menentukan jenisnya. Walau bagaimanapun, dalam keadaan ini, parameter templat A digunakan dalam konteks tidak terdeduksi, kerana ia hanya muncul dalam pengisytiharan jenis rujukan:

typedef typename T& type;
Salin selepas log masuk

Akibatnya, pengkompil tidak boleh menyimpulkan hujah templat daripada panggilan fungsi. Untuk menyelesaikan isu ini, anda perlu menyatakan hujah templat secara eksplisit apabila memanggil fungsi ini:

temp<char>(c);
Salin selepas log masuk

Dengan memberikan hujah eksplisit, pengkompil dapat membuat instantiate templat dengan jenis yang sesuai dengan betul.

Atas ialah kandungan terperinci Mengapa Potongan Hujah Templat C Saya Gagal dalam Konteks Tidak Terdeduksi?. 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