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

Templates ใน C++ เทียบกับ Generics ใน Java

ทั้ง C++ Templates และ Java Generics ใช้สำหรับ generic programming (เขียนโค้ดไม่ขึ้นกับชนิดข้อมูล) แต่มีความแตกต่างทางการทำงานพื้นฐาน

C++ Templates

  • Compiler สร้างโค้ดใหม่สำหรับแต่ละชนิดข้อมูล (code generation / monomorphization)
  • รองรับ primitive types (int, double) และ user-defined types
  • รองรับ template metaprogramming, non-type template parameters
  • Compile-time polymorphism

Java Generics

  • ใช้ Type Erasure: ข้อมูลชนิดถูกลบหลัง compile-time มีเพียงหนึ่ง bytecode
  • ไม่รองรับ primitive types ต้องใช้ wrapper classes (Integer, Double)
  • Compile-time type safety, ลดการ cast
  • Runtime polymorphism ผ่าน interfaces

ความแตกต่างสำคัญ

คุณสมบัติC++ TemplatesJava Generics
การสร้างโค้ดสร้างใหม่ต่อ type (code bloat)Type erasure, bytecode เดียว
Primitive typesรองรับโดยตรงไม่รองรับ (ต้อง wrap)
Template metaprogrammingรองรับไม่รองรับ
Runtime type infoมี (RTTI)ถูกลบ (erased)

C++ templates เหมาะสำหรับ high-performance และ metaprogramming ส่วน Java generics เน้น type safety และความง่าย