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
Susan Sarandonasal
2024-12-26 07:31:12618semak imbas

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
}

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!

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