12
ทำไมไม่อนุมานพารามิเตอร์เทมเพลตจากตัวสร้าง
คำถามของฉันวันนี้ค่อนข้างง่าย: ทำไมคอมไพเลอร์ไม่สามารถสรุปพารามิเตอร์เทมเพลตจากตัวสร้างคลาสได้มากเท่าที่จะทำได้จากพารามิเตอร์ฟังก์ชัน ตัวอย่างเช่นเหตุใดรหัสต่อไปนี้จึงไม่ถูกต้อง: template<typename obj> class Variable { obj data; public: Variable(obj d) { data = d; } }; int main() { int num = 2; Variable var(num); //would be equivalent to Variable<int> var(num), return 0; //but actually a compile error } อย่างที่ฉันพูดฉันเข้าใจว่ามันไม่ถูกต้องดังนั้นคำถามของฉันคือทำไมไม่เป็นเช่นนั้น? จะช่วยให้สิ่งนี้สร้างช่องทางไวยากรณ์ที่สำคัญหรือไม่? มีอินสแตนซ์ที่ใครไม่ต้องการฟังก์ชันนี้ (โดยที่การอนุมานประเภทจะทำให้เกิดปัญหา)? ฉันแค่พยายามเข้าใจตรรกะเบื้องหลังการอนุญาตให้มีการอนุมานเทมเพลตสำหรับฟังก์ชัน แต่ไม่ใช่สำหรับคลาสที่สร้างขึ้นอย่างเหมาะสม