ฉันหมายถึงนอกเหนือจากชื่อหน้าที่ (ไลบรารีเทมเพลตมาตรฐาน) ...
C ++ เริ่มแรกมีจุดประสงค์เพื่อนำเสนอแนวคิดของ OOP ใน C นั่นคือ: คุณสามารถบอกได้ว่าเอนทิตีที่เฉพาะเจาะจงสามารถทำได้และไม่สามารถทำได้ องค์ประกอบของความสามารถบางอย่างยากที่จะอธิบายในลักษณะนี้เนื่องจากปัญหาของการถ่ายทอดทางพันธุกรรมที่หลากหลายและความจริงที่ว่า C ++ รองรับแนวคิดของอินเตอร์เฟสในทางที่ค่อนข้างงุ่มง่าม (เทียบกับ java และอื่น ๆ ) แต่มันมี (และอาจเป็น การปรับปรุง)
จากนั้นเทมเพลตก็เข้ามาเล่นพร้อมกับ STL STL ดูเหมือนจะใช้แนวคิด OOP แบบดั้งเดิมและล้างลงในท่อระบายน้ำโดยใช้แม่แบบแทน
ควรมีความแตกต่างระหว่างกรณีเมื่อแม่แบบที่ใช้ในการพูดคุยประเภทที่ชุดรูปแบบประเภทที่ไม่เกี่ยวข้องสำหรับการดำเนินงานของแม่แบบ (ภาชนะบรรจุตัวอย่างเช่น) มีvector<int>
ความรู้สึกที่สมบูรณ์แบบ
อย่างไรก็ตามในกรณีอื่น ๆ (ตัววนซ้ำและอัลกอริทึม) ประเภทของเทมเพลตควรเป็นไปตาม "แนวคิด" (อินพุต Iterator, Forward Iterator เป็นต้น ... ) ซึ่งรายละเอียดที่แท้จริงของแนวคิดถูกกำหนดโดยการนำเทมเพลตมาใช้ทั้งหมด ฟังก์ชั่น / ชั้นเรียนและไม่ตามระดับของประเภทที่ใช้กับแม่แบบซึ่งค่อนข้างต่อต้านการใช้งานของ OOP
ตัวอย่างเช่นคุณสามารถบอกฟังก์ชั่น:
void MyFunc(ForwardIterator<...> *I);
อัปเดต:เนื่องจากยังไม่ชัดเจนในคำถามต้นฉบับ ForwardIterator ก็โอเคที่จะ templated ตัวเองเพื่ออนุญาต ForwardIterator ทุกประเภท ตรงกันข้ามมี ForwardIterator เป็นแนวคิด
คาดว่าจะส่งต่อ Iterator โดยดูที่คำจำกัดความของมันซึ่งคุณจะต้องดูที่การใช้งานหรือเอกสารประกอบสำหรับ:
template <typename Type> void MyFunc(Type *I);
สองข้อเรียกร้องที่ฉันสามารถใช้เทมเพลตได้: รหัสที่คอมไพล์สามารถทำให้มีประสิทธิภาพมากขึ้นโดยการรวบรวมเทมเพลตสำหรับแต่ละประเภทที่ใช้แทนการใช้ vtables และความจริงที่ว่าเทมเพลตสามารถใช้กับประเภทเนทิฟได้
อย่างไรก็ตามฉันกำลังมองหาเหตุผลที่ลึกซึ้งยิ่งขึ้นว่าทำไมการละทิ้ง OOP แบบคลาสสิกเพื่อสร้างเท็มเพลตสำหรับ STL (สมมติว่าคุณอ่านจนถึงตอนนี้: P)
vector<int>
และvector<char>
ใช้งานในเวลาเดียวกัน พวกเขาอาจจะแน่ใจ แต่คุณอาจใช้ใด ๆสองชิ้นของรหัสในเวลาเดียวกัน ไม่เกี่ยวข้องกับเทมเพลต C ++ หรือ STL ไม่มีสิ่งใดในการสร้างอินสแตนซ์vector<int>
ซึ่งต้องการให้vector<char>
โค้ดโหลดหรือเรียกใช้งาน