Dalam alam C , anda mungkin menghadapi senario di mana anda ingin menentukan ahli data statik untuk kelas templat, tetapi jenis data bukan bersepadu menimbulkan cabaran. Artikel ini menyelidiki penyelesaian yang membolehkan anda mengisytiharkan ahli statik tanpa mengira jenis mereka sambil memastikan kewujudan mereka dalam kod yang disusun.
Pertimbangkan coretan kod berikut:
template <typename T> struct S { ... static double something_relevant = 1.5; };
Sebagaimana anda' saya perasan, pengkompil melemparkan ralat kerana something_relevant bukanlah jenis data penting. Isu ini berpunca daripada fakta bahawa templat diwujudkan apabila digunakan, dan memandangkan S ialah templat, anda tidak boleh mentakrifkan ahlinya di dalam fail yang dihimpun.
Untuk mengatasi halangan ini, anda boleh memilih untuk menentukan ahli statik dalam fail pengepala itu sendiri, seperti yang ditunjukkan di bawah:
template <typename T> struct S { static double something_relevant; }; template <typename T> double S<T>::something_relevant = 1.5;
Dengan mentakrifkan ahli statik dalam fail pengepala, anda memastikan takrifan luar kelas dan elakkan sebarang ralat penyusunan. Selain itu, kerana ia disertakan dalam templat, pengkompil akan mengendalikan sebarang definisi berbilang berpotensi, memastikan instantiasi yang bersih. Teknik ini membolehkan anda mengekalkan ahli statik dalam templat kelas, tanpa mengira jenis data mereka dan menjamin bahawa mereka akan hadir dalam kod penyusunan akhir.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Ahli Kelas Statik (Termasuk Jenis Bukan Sepadu) dalam Templat Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!