ทั้ง 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++ Templates | Java 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 และความง่าย