Saling Pergantungan Pelaksanaan Kelas Templat dan Pengisytiharan dalam Fail Pengepala
Dalam alam C , kelas templat mempunyai ciri unik: pelaksanaan dan pengisytiharan mesti berada dalam fail pengepala yang sama. Keperluan ini berpunca daripada ketidakupayaan pengkompil untuk menjana kod bagi setiap instantiasi templat tanpa akses penuh kepada definisinya.
Pertimbangkan contoh:
// my_template.h template <typename T> class MyClass { public: T value; }; // my_template.cpp #include "my_template.h" template <typename T> void MyClass<T>::foo(T& value) { this->value = value; }
Dalam contoh ini, my_template.h mengandungi kedua-dua pengisytiharan dan pelaksanaan templat MyClass. Ini adalah perlu kerana apabila anda membuat instantiate MyClass dengan jenis tertentu, seperti MyClass
Jika pelaksanaan telah dialihkan ke fail sumber yang berasingan, pengkompil tidak akan dapat mencarinya semasa proses instantiasi. Akibatnya, program ini akan gagal untuk menyusun.
Oleh itu, adalah penting untuk mengekalkan pelaksanaan dan pengisytiharan kelas templat dalam fail pengepala yang sama untuk memastikan penyusunan dan penjanaan kod berjaya untuk sebarang instantiasi pada masa hadapan.
Atas ialah kandungan terperinci Mengapa Perlaksanaan dan Pengisytiharan Kelas Templat C Mesti Berada dalam Fail Pengepala yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!