C++ টেমপ্লেট এবং জাভা জেনেরিকস দুটোই জেনেরিক প্রোগ্রামিং সক্ষম করে, কিন্তু বাস্তবায়ন ও ব্যবহারে বড় পার্থক্য রয়েছে।
C++ টেমপ্লেট
কম্পাইল টাইমে টেমপ্লেট কোড প্রতিটি টাইপের জন্য আলাদা কোড জেনারেট করে (code bloat)। এটি টাইপ-সেফ এবং হাই-পারফরম্যান্স।
উদাহরণ
#include <iostream>
#include <string>
using namespace std;
template <typename T>
inline T const& Max(T const& a, T const& b) {
return a < b ? b : a;
}
int main() {
cout << Max(39, 20) << endl; // 39
cout << Max(13.5, 20.7) << endl; // 20.7
cout << Max(string("Hello"), string("World")) << endl; // World
return 0;
}
জাভা জেনেরিকস
জাভা টাইপ ইরেজার (type erasure) ব্যবহার করে। কম্পাইল টাইমে টাইপ চেক হয়, কিন্তু রানটাইমে জেনেরিক টাইপ ইনফরমেশন মুছে ফেলা হয়। শুধু রেফারেন্স টাইপ সাপোর্ট করে (প্রিমিটিভ টাইপ নয়)।
উদাহরণ
public class GenericMethodTest {
public static <E> void printArray(E[] inputArray) {
for (E element : inputArray)
System.out.printf("%s ", element);
System.out.println();
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3, 4, 5};
Double[] doubleArray = {1.1, 2.2, 3.3, 4.4};
Character[] charArray = {'H','E','L','L','O'};
printArray(intArray);
printArray(doubleArray);
printArray(charArray);
}
}
প্রধান পার্থক্য
| বিষয় | C++ টেমপ্লেট | জাভা জেনেরিকস |
|---|---|---|
| বাস্তবায়ন | কম্পাইল টাইমে কোড জেনারেশন (monomorphization) | টাইপ ইরেজার, একক বাইটকোড |
| প্রিমিটিভ টাইপ | সাপোর্ট করে | সাপোর্ট করে না (ওয়ারapper ক্লাস লাগে) |
| রানটাইম টাইপ ইনফো | উপলব্ধ (RTTI) | ইরেজার হয়ে যায় |
| টেমপ্লেট মেটা-প্রোগ্রামিং | সম্ভব | সম্ভব নয় |
| পারফরম্যান্স | উচ্চ (ইনলাইনিং, অপ্টিমাইজেশন) | কিছুটা কম (বক্সিং/আনবক্সিং) |
সারসংক্ষেপ: C++ টেমপ্লেট বেশি শক্তিশালী ও ফ্লেক্সিবল, জাভা জেনেরিকস সাদगी ও টাইপ সেফটিতে ফোকাস করে।