เราเพิ่งเรียนรู้เกี่ยวกับ ฟังก์ชันโอเวอร์โหลด ซึ่งสามารถจัดการข้อมูลได้หลายประเภท แม้ว่าพวกมันจะมีชื่อเดียวกัน แต่ก็ยังต้องมีการกำหนดแยกกัน จะดีมากถ้าโค้ดสามารถปรับปรุงและสร้างเทมเพลตได้ ด้วยเหตุนี้ C++ จึงจัดให้มีกลไกเทมเพลตฟังก์ชัน ซึ่งช่วยปรับปรุงการนำโค้ดกลับมาใช้ใหม่ได้อย่างมาก
เทมเพลตฟังก์ชัน ช่วยให้คุณสร้างฟังก์ชันทั่วไปที่รองรับพารามิเตอร์ที่เป็นทางการหลายรายการได้ ใช้ เทมเพลต คำหลักเพื่อกำหนดในรูปแบบต่อไปนี้:
เทมเพลต<ชื่อประเภทคลาส 1 ชื่อประเภทคลาส 2...> ชื่อฟังก์ชันค่าส่งคืน (คอลัมน์รายการพารามิเตอร์อย่างเป็นทางการ) รายการพารามิเตอร์เทมเพลต {function body}
เพื่ออธิบาย ในรูปแบบทั่วไปนี้ เทมเพลตในบรรทัดแรก <class type name 1, class type name 2...> คือ คำสั่งการประกาศ เทมเพลตคือคีย์เวิร์ดที่กำหนดฟังก์ชันเทมเพลต สามารถมีได้หลายประเภท วงเล็บมุม อันก่อนหน้าคือใช้คลาส (หรือชื่อประเภทเพื่อกำหนด) จากนั้นตามด้วยเทมเพลตฟังก์ชันที่กำหนดไว้ จำไว้ว่าอย่าเพิ่มคำสั่งอื่นตรงกลาง มิฉะนั้นจะรายงานข้อผิดพลาด!
ด้านล่างนี้เรามาดูตัวอย่างที่เฉพาะเจาะจงกันดีกว่า!
#include<iostream>usingnamespacestd;template<classT1,classT2>T1add(T1x,T2y){cout<<sizeof(T1)<<,<<sizeof(T2)<<t;returnx+y;}intmain(){ cout<<เพิ่ม(10,20)<<endl;;cout<<เพิ่ม(3.14,5.98)<<endl;cout<<เพิ่ม('A',2)<<endl;return0;}
ด้านบนนี้เป็นเทมเพลตสำหรับฟังก์ชันบวก คุณจะเห็นว่าเราได้กำหนดเทมเพลตฟังก์ชันเพิ่มแล้ว และประเภทตัวแปรในนั้นจะถูกแทนที่ด้วย T1 และ T2
ในฟังก์ชั่นหลักเมื่อเราเรียกมันจริง ๆ เราจะเรียกมันว่าสามครั้งโดยส่งผ่านประเภทที่แตกต่างกันสามประเภทในฟังก์ชันเทมเพลตจะถูกเปลี่ยนเป็นประเภทเฉพาะตามประเภทจริงที่ส่งเข้ามา การแปลงนี้เรียกว่า ตัวอย่างของการเปลี่ยนแปลง
จากนั้นเรารันโปรแกรมและดูว่าแต่ละครั้ง T1 และ T2 เรียกว่าประเภทใด มีกี่ไบต์ และผลการสรุป ผลการวิ่งมีดังนี้:
คุณสามารถเข้าใจโค้ดทีละบรรทัดและทำการทดสอบได้ด้วยตัวเอง