Rumah > pembangunan bahagian belakang > C++ > Mengapa Perlaksanaan dan Pengisytiharan Kelas Templat Mesti Berada dalam Fail Pengepala yang Sama?

Mengapa Perlaksanaan dan Pengisytiharan Kelas Templat Mesti Berada dalam Fail Pengepala yang Sama?

Susan Sarandon
Lepaskan: 2024-12-26 07:31:12
asal
542 orang telah melayarinya

Why Must Template Class Implementations and Declarations Reside in the Same Header File?

Di mana hendak ditempatkan Perlaksanaan dan Pengisytiharan Kelas Templat

Masalah:

Mengapa penting untuk mempunyai kedua-dua pelaksanaan dan pengisytiharan kelas templat dalam pengepala yang sama fail?

Jawapan:

Untuk memahami kepentingan menempatkan pelaksanaan dan pengisytiharan kelas templat dalam fail pengepala yang sama, pertimbangkan proses instantiasi templat.

Pengkompil memerlukan akses kepada definisi templat yang lengkap, bukan hanya tandatangan, untuk menjana kod bagi setiap instantiasi templat. Ini bermakna takrifan fungsi templat mesti disertakan dalam fail pengepala.

Contoh:

// header.h
template <typename T>
class MyTemplate {
public:
    MyTemplate(T n) { value = n; }
    void setValue(T n) { value = n; }
    T getValue() { return value; }
private:
    T value;
};

// source.cpp
#include "header.h"  // includes implementation

// code that uses the template
int main() {
    MyTemplate<int> obj(10);
    obj.setValue(5);
    cout << obj.getValue(); // outputs 5
}
Salin selepas log masuk

Dalam contoh ini, pelaksanaan fungsi MyTemplate disertakan dalam tajuk. Apabila templat dibuat seketika (cth., MyTemplate), pengkompil boleh menjana kod yang diperlukan dengan serta-merta berdasarkan definisi templat lengkap.

Dengan meletakkan kedua-dua pelaksanaan dan pengisytiharan dalam pengepala yang sama, anda memastikan bahawa pengkompil mempunyai semua maklumat yang diperlukan pada masa penyusunan untuk membuat instantiat templat dengan betul untuk setiap jenis tertentu.

Atas ialah kandungan terperinci Mengapa Perlaksanaan dan Pengisytiharan Kelas Templat Mesti Berada dalam Fail Pengepala yang Sama?. 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