Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เหตุใดจึงสามารถใช้เทมเพลต C ++ ในไฟล์ส่วนหัวเท่านั้น


เมื่อคุณสร้างเทมเพลตใน C++ คอมไพเลอร์จะสร้างคลาสใหม่ คลาสนี้มีสถานที่ทั้งหมดที่คุณวางอาร์กิวเมนต์เทมเพลตแทนที่ด้วยอาร์กิวเมนต์จริงที่คุณส่งผ่านเมื่อใช้ สำหรับ ตัวอย่าง

template<typename T> class MyClass {
   T foo;
   T myMethod(T arg1, T arg2) {
      // Impl
   }
};

และที่ใดที่หนึ่งในโปรแกรมของคุณก็ใช้คลาสนี้

MyClass<int> x;

คอมไพเลอร์สร้างคลาสใหม่เมื่อพบสิ่งนี้สำหรับอาร์กิวเมนต์ทุกประเภทที่คุณส่งผ่าน ตัวอย่างเช่น หากคุณสร้างวัตถุ 3 รายการที่มีอาร์กิวเมนต์เทมเพลตต่างกัน คุณจะได้ 3 คลาส ซึ่งจะเทียบเท่ากับ −

class MyClassInt {
   int foo;
   int myMethod(int arg1, int arg2) {
      // Impl
   }
};

ในการดำเนินการดังกล่าว คอมไพเลอร์จำเป็นต้องมีการเข้าถึงการใช้งานคลาสและวิธีการก่อนที่จะพบคำสั่งดังกล่าว เพื่อสร้างอินสแตนซ์ด้วยอาร์กิวเมนต์เทมเพลต (ในกรณีนี้คือ int) หากการใช้งานคลาสเทมเพลตเหล่านี้ไม่อยู่ในส่วนหัว จะไม่สามารถเข้าถึงได้และจะไม่สามารถคอมไพล์ได้