Rumah > pembangunan bahagian belakang > C++ > Mengapa Carian Bergantung Hujah (ADL) Gagal untuk Templat Fungsi C?

Mengapa Carian Bergantung Hujah (ADL) Gagal untuk Templat Fungsi C?

Mary-Kate Olsen
Lepaskan: 2024-12-11 08:48:11
asal
701 orang telah melayarinya

Why Does Argument-Dependent Lookup (ADL) Fail for C   Function Templates?

ADL Kegagalan dalam Mencari Templat Fungsi

Dalam C , pencarian bergantung hujah (ADL) membolehkan carian untuk pengisytiharan nama fungsi dalam ruang nama yang dikaitkan dengan argumen dalam panggilan fungsi. Walau bagaimanapun, terdapat sekatan dalam spesifikasi C apabila ia berkaitan dengan templat fungsi dan ADL.

Sekatan

Menurut C Standard 14.8.1.6, ADL tidak digunakan pada templat fungsi melainkan terdapat templat fungsi yang boleh dilihat dengan nama yang sama pada titik panggilan. Ini bermakna, untuk templat fungsi dengan hujah templat eksplisit, panggilan mesti mempunyai bentuk sintaksis yang betul dengan templat fungsi yang boleh dilihat.

Contoh

Pertimbangkan contoh berikut:

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&amp;) {}
    void non_template(foo const&amp;) {}
}

int main() {
    ns::foo f;
    non_template(f); // This is fine.
    frob<0>(f); // This is not.
}
Salin selepas log masuk

Dalam contoh ini, ADL mencari dan menyelesaikan non_template untuk panggilan pertama kerana non_template ialah fungsi biasa. Walau bagaimanapun, untuk panggilan kedua, frob ialah templat fungsi. Memandangkan tiada templat fungsi frob yang kelihatan pada titik panggilan, ADL gagal dan panggilan tidak dibentuk secara sintaksis dengan baik.

Menangani Sekatan

Kepada atasi sekatan ini, pastikan templat fungsi kelihatan dalam skop panggilan. Ini boleh dicapai dengan mengisytiharkan templat fungsi dalam ruang nama semasa atau dengan melayakkan panggilan dengan ruang nama yang mengandungi templat fungsi.

Atas ialah kandungan terperinci Mengapa Carian Bergantung Hujah (ADL) Gagal untuk Templat Fungsi 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