Rumah > pembangunan bahagian belakang > C++ > Mengapa Pengkhususan Eksplisit Ahli Berfungsi Di Luar Ruang Namanya Menyebabkan Ralat Penyusunan C?

Mengapa Pengkhususan Eksplisit Ahli Berfungsi Di Luar Ruang Namanya Menyebabkan Ralat Penyusunan C?

Susan Sarandon
Lepaskan: 2024-12-04 11:56:11
asal
711 orang telah melayarinya

Why Does Explicit Specialization of a Member Function Outside its Namespace Cause a C   Compilation Error?

Pengkhususan Eksplisit dalam Skop Bukan Ruang Nama

Dalam kelas templat CConstraint, pengkhususan eksplisit fungsi ahli Verify untuk int ditakrifkan di luar ruang nama kelas. Ini menyebabkan ralat dalam g disebabkan oleh pelanggaran piawaian C.

Menurut C 03 §14.7.3/2, pengkhususan eksplisit mesti diisytiharkan dalam ruang nama yang templat adalah ahli atau, untuk ahli templat, dalam ruang nama di mana kelas yang disertakan atau templat kelas yang disertakan adalah ahli.

Untuk menyelesaikan isu ini, yang eksplisit pengkhususan Verify for int mesti diisytiharkan dalam ruang nama CConstraint. Ini boleh dicapai dengan menggunakan kod yang diubah suai berikut:


template
kelas CCconstraint
{
awam:

CConstraint()
{
}

virtual ~CConstraint()
{
}

template <typename TL>
void Verify(int position, int constraints[])
{       
}

template <>
void Verify<int>(int position, int constraints[])
{   
}
Salin selepas log masuk

};

Selain itu, memandangkan pengkhususan eksplisit fungsi ahli memerlukan pengkhususan eksplisit kelas yang mengandungi , penyelesaian yang lebih baik ialah mengalihkan fungsi Verify keluar dari kelas dan ke dalam yang berasingan ruang nama:


perincian ruang nama
{

template <typename TL>
void Verify(int position, int constraints[]) { }

template <>
void Verify<int>(int position, int constraints[]) { }
Salin selepas log masuk

}

template
kelas Cconstraint
{

// ...

template <typename TL>
void Verify(int position, int constraints[])
{
    detail::Verify<TL>(position, constraints);
}
Salin selepas log masuk

};

Atas ialah kandungan terperinci Mengapa Pengkhususan Eksplisit Ahli Berfungsi Di Luar Ruang Namanya Menyebabkan Ralat Penyusunan C?. 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