หากฉันได้รับอนุญาตให้ทำสิ่งต่อไปนี้:
template <typename T = int>
class Foo{
};
ทำไมฉันไม่ได้รับอนุญาตให้ทำสิ่งต่อไปนี้ในหลัก
Foo me;
แต่ฉันต้องระบุสิ่งต่อไปนี้:
Foo<int> me;
C ++ 11 นำเสนอข้อโต้แย้งแม่แบบเริ่มต้นและตอนนี้พวกเขากำลังเข้าใจความเข้าใจของฉันอย่างสมบูรณ์
Foo
อาจเป็นตัวระบุเทมเพลตหรืออาจเป็นอินสแตนซ์ที่ชัดเจนขึ้นอยู่กับว่ามีอาร์กิวเมนต์เริ่มต้นหรือไม่ ทำให้ไวยากรณ์อินสแตนซ์ที่ชัดเจนดีขึ้น คิดว่ามันเหมือนฟังก์ชั่นที่foo
มีพารามิเตอร์เริ่มต้นเดียว คุณไม่สามารถเรียกมันชอบคุณเรียกมันว่าด้วยfoo
foo()
มันสมเหตุสมผลที่จะทำให้สิ่งนี้สอดคล้องกัน