Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memulakan Ahli Kelas Statik dengan betul dalam Templat Kelas C?

Bagaimana untuk Memulakan Ahli Kelas Statik dengan betul dalam Templat Kelas C?

Patricia Arquette
Patricia Arquetteasal
2024-12-09 12:38:17614semak imbas

How to Properly Initialize Static Class Members in C   Class Templates?

Mentakrifkan Ahli Kelas Statik dalam Templat Kelas

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!

Kenyataan:
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