Masalah:
Mengapa penting untuk mempunyai kedua-dua pelaksanaan dan pengisytiharan kelas templat dalam pengepala yang sama fail?
Jawapan:
Untuk memahami kepentingan menempatkan pelaksanaan dan pengisytiharan kelas templat dalam fail pengepala yang sama, pertimbangkan proses instantiasi templat.
Pengkompil memerlukan akses kepada definisi templat yang lengkap, bukan hanya tandatangan, untuk menjana kod bagi setiap instantiasi templat. Ini bermakna takrifan fungsi templat mesti disertakan dalam fail pengepala.
Contoh:
// header.h template <typename T> class MyTemplate { public: MyTemplate(T n) { value = n; } void setValue(T n) { value = n; } T getValue() { return value; } private: T value; }; // source.cpp #include "header.h" // includes implementation // code that uses the template int main() { MyTemplate<int> obj(10); obj.setValue(5); cout << obj.getValue(); // outputs 5 }
Dalam contoh ini, pelaksanaan fungsi MyTemplate disertakan dalam tajuk. Apabila templat dibuat seketika (cth., MyTemplate
Dengan meletakkan kedua-dua pelaksanaan dan pengisytiharan dalam pengepala yang sama, anda memastikan bahawa pengkompil mempunyai semua maklumat yang diperlukan pada masa penyusunan untuk membuat instantiat templat dengan betul untuk setiap jenis tertentu.
Atas ialah kandungan terperinci Mengapa Perlaksanaan dan Pengisytiharan Kelas Templat Mesti Berada dalam Fail Pengepala yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!