কম্পিউটার টিউটোরিয়াল

C++ টেমপ্লেট vs জাভা জেনেরিকস: পার্থক্য

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++ টেমপ্লেট বেশি শক্তিশালী ও ফ্লেক্সিবল, জাভা জেনেরিকস সাদगी ও টাইপ সেফটিতে ফোকাস করে।

  1. সি শার্পে Func জেনেরিক টাইপ

  2. C#-এ জেনেরিকস (Generics)

  3. C# জেনেরিক্স বনাম C++ টেমপ্লেটস

  4. জাভাতে টাইপ ইরেজার (Type Erasure)