Dalam C , ahli data statik dalam templat kelas tidak boleh dimulakan secara langsung apabila ditakrifkan dalam pengisytiharan kelas. Apabila berurusan dengan jenis bukan kamiran, pengehadan ini menimbulkan cabaran.
Pertimbangkan kod berikut:
template <typename T> struct S { ... static double something_relevant = 1.5; };
Kod ini tidak boleh disusun kerana something_relevant bukan jenis kamiran. Walau bagaimanapun, penyelesaiannya terletak pada mentakrifkan ahli di luar pengisytiharan kelas.
template <typename T> struct S { static double something_relevant; }; template <typename T> double S<T>::something_relevant = 1.5;
Dalam pendekatan ini, ahli statik pertama kali diisytiharkan dalam definisi kelas. Kemudian, takrifan disediakan di luar kelas, selepas pengisytiharan templat. Pendekatan ini memastikan ahli statik ditakrifkan sekali merentas semua instantiasi templat S.
Pengkompil akan mengendalikan proses takrifan. Apabila menemui pengisytiharan ahli dalam kelas, ia akan menyedari bahawa ia adalah sebahagian daripada templat. Apabila menemui definisi di luar kelas, pengkompil akan menggantikan parameter templat T dengan jenis sebenar yang digunakan dalam instantiasi. Ini memastikan bahawa setiap instantiasi templat S mempunyai salinan sendiri ahli statik something_relevant.
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Ahli Kelas Statik dengan betul dalam Templat Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!