Rumah > pembangunan bahagian belakang > C++ > Mengapa Potongan Jenis Templat Gagal Apabila Membuat kesimpulan daripada Jenis Ahli?

Mengapa Potongan Jenis Templat Gagal Apabila Membuat kesimpulan daripada Jenis Ahli?

Barbara Streisand
Lepaskan: 2024-12-19 09:24:10
asal
198 orang telah melayarinya

Why Does Template Type Deduction Fail When Inferring from a Member Type?

Kegagalan Potongan dalam Inferens Jenis Templat

Apabila cuba menyimpulkan hujah templat daripada ahli jenis, adalah penting untuk memastikan konteks boleh disimpulkan. Dalam kod yang diberikan, ralat berlaku dalam fungsi ujian apabila pengkompil cuba menyimpulkan hujah templat T daripada nama taip TMap::Type.

Kegagalan ini berpunca daripada konsep "konteks tidak boleh ditolak ." Dalam kes ini, jenis ahli TMap jenis templat 'Jenis' tidak mempunyai hubungan yang wujud dengan hujah templat T.

Pertimbangkan pengkhususan hipotesis TMap:

template <>
struct TMap<SomeType> {
    typedef std::map<double, double> Type;
};
Salin selepas log masuk

Jika pengkompil terpaksa menyimpulkan T daripada TMap::Jenis, ia akan menghadapi kesamaran. Nilai TMap::Type ialah std::map. Walau bagaimanapun, ia tidak dijamin bahawa T dalam TMap adalah sama seperti SomeType dalam pengkhususan.

Mengkhususkan lagi TMap:

template <>
struct TMap<OtherType> {
    typedef std::map<double, double> Type;
};
Salin selepas log masuk

Keadaan bertambah buruk, seperti yang berikut berlaku:

  • TMap
  • TMap::Type = std::map

Memandangkan kekaburan ini, pengkompil tidak boleh menentukan sama ada T ialah SomeType atau OtherType Ia juga tidak boleh menentukan bilangan pilihan yang mungkin atau mengenal pasti pilihan tersebut.

Oleh itu, dalam konteks seperti ini di mana jenis ahli templat tidak mempunyai hubungan langsung dengan hujah templat, potongan hujah templat gagal dan pengkompil menimbulkan ralat.

Atas ialah kandungan terperinci Mengapa Potongan Jenis Templat Gagal Apabila Membuat kesimpulan daripada Jenis Ahli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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