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
Lepaskan: 2024-12-09 12:38:17
asal
622 orang telah melayarinya

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;
};
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan