Rumah > pembangunan bahagian belakang > C++ > Bolehkah Kelas C Templat Dipisahkan kepada Fail Pengepala dan Pelaksanaan Berasingan?

Bolehkah Kelas C Templat Dipisahkan kepada Fail Pengepala dan Pelaksanaan Berasingan?

Linda Hamilton
Lepaskan: 2024-12-13 18:55:10
asal
438 orang telah melayarinya

Can Templated C   Classes Be Split into Separate Header and Implementation Files?

Adakah Membahagikan Kelas C Templat kepada Fail .hpp dan .cpp Berasingan Boleh Dilaksanakan?

Apabila cuba menyusun kelas C templat merentas pengepala berasingan (.hpp) dan fail pelaksanaan (.cpp), anda mungkin menghadapi ralat pemautan. Pertimbangkan kod berikut:

// stack.hpp
template <typename Type>
class stack {
    // ...
};
Salin selepas log masuk
// stack.cpp
template <typename Type> stack<Type>::stack() {
    // ...
}
Salin selepas log masuk
// main.cpp
#include "stack.hpp"
stack<int> s;
Salin selepas log masuk

Penyusunan gagal dengan ralat "rujukan tidak ditentukan" untuk kaedah kelas templat. Walaupun boleh, memindahkan semua pelaksanaan kaedah ke dalam fail pengepala bukanlah penyelesaian yang ideal.

Mengapa Kompilasi Berasingan Gagal untuk Kelas Templat

Isu ini berpunca daripada fakta bahawa templat kelas tidak ditakrifkan sepenuhnya pada masa penyusunan. Pengkompil menjana kod untuk instantiasi tertentu berdasarkan parameter templat yang disediakan. Tanpa parameter templat, pengkompil tidak boleh menjana reka letak memori dan kod untuk kaedah dalam fail pelaksanaan.

Alternatif: Mengasingkan Struktur Data dan Algoritma

Untuk menyembunyikan butiran pelaksanaan sambil mengekalkan pemisahan, pertimbangkan untuk memisahkan struktur data daripada algoritma. Kelas templat harus mentakrifkan struktur data terutamanya, manakala kelas algoritma bukan templat beroperasi pada atau menggunakannya. Pendekatan ini secara berkesan menyembunyikan butiran pelaksanaan yang berharga tanpa memerlukan fail pelaksanaan berasingan untuk kelas templat.

Atas ialah kandungan terperinci Bolehkah Kelas C Templat Dipisahkan kepada Fail Pengepala dan Pelaksanaan Berasingan?. 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