Concepts এবং Template Constraints (C++20)

Templates in C++ (টেমপ্লেট) - সি++ স্ট্যান্ডার্ড লাইব্রেরি (C++ Standard Library) - Computer Programming

250

C++20 তে Concepts এবং Template Constraints চালু হয়েছে, যা টেমপ্লেট প্রোগ্রামিংয়ের সুবিধা এবং শক্তিশালী যাচাইকরণ প্রদান করে। Concepts একটি নতুন বৈশিষ্ট্য যা টেমপ্লেট আর্গুমেন্টগুলোর জন্য শর্ত বা বিধিনিষেধ (constraints) সন্নিবেশ করতে সহায়ক। এটি মূলত std::enable_if বা অন্যান্য সিস্টেমের তুলনায় অনেক বেশি ব্যাবহারযোগ্য এবং সরল উপায়ে টাইপ যাচাইকরণের সুবিধা প্রদান করে।


১. Concepts

Concepts একটি নতুন ধরনের ডেটা টাইপ প্রপার্টি যা টেমপ্লেট প্যারামিটারগুলির জন্য শর্ত বা বিধিনিষেধ প্রয়োগ করে। Concepts ব্যবহারে, টাইপ বা প্যারামিটার কেমন হবে, সেই বিষয়ে স্পষ্টভাবে একটি শর্ত নির্ধারণ করা হয়। এটি কোডে টাইপ সঠিকতা যাচাই করতে সাহায্য করে এবং আরও পড়তে সুবিধাজনক করে তোলে। concept একটি বিশেষ ধরনের ক্লাস নয়, বরং একটি টেমপ্লেট প্যারামিটার জন্য শর্ত যা টেমপ্লেট আর্গুমেন্টের বৈশিষ্ট্য নির্ধারণ করে।

Concept উদাহরণ:

#include <iostream>
#include <concepts>

// একটি কনসেপ্ট তৈরি করা
template<typename T>
concept Addable = requires(T a, T b) {
    { a + b } -> std::same_as<T>;  // 'a' এবং 'b' এর যোগফল টাইপ T হতে হবে
};

// একটি ফাংশন যেখানে Concept ব্যবহৃত হচ্ছে
template <Addable T>
T add(T a, T b) {
    return a + b;
}

int main() {
    std::cout << add(5, 3) << std::endl;  // এটি কাজ করবে, কারণ 5 এবং 3 যোগফলটি একটি int
    // std::cout << add("Hello", " World"); // এটি ত্রুটি দিবে, কারণ string যোগফলটি Concept এর সাথে মেলে না
    return 0;
}

এখানে, Addable একটি কনসেপ্ট যা যাচাই করে যে a + b অপারেশনটি টাইপ T এর জন্য বৈধ কিনা। add ফাংশনটি Addable কনসেপ্টের মাধ্যমে নিশ্চিত করে যে, শুধুমাত্র সেই ধরণের আর্গুমেন্ট গ্রহণ করা হবে, যেগুলোর জন্য + অপারেশনটি বৈধ।


২. Template Constraints

C++20 এ Template Constraints এর মাধ্যমে, আমরা টেমপ্লেট প্যারামিটারগুলোর জন্য বিভিন্ন শর্ত আরোপ করতে পারি, যেগুলোর ভিত্তিতে টেমপ্লেটের বৈধতা নির্ধারণ করা হয়। এই শর্তগুলির মাধ্যমে কিছু নির্দিষ্ট অ্যাকশন বা যাচাইকরণ করতে পারি যা C++20-এর Concepts এ ব্যাখ্যা করা হয়েছে। এই Constraints আসলে Concepts ব্যবহার করে করা হয়।

উদাহরণ: Template Constraints

#include <iostream>
#include <concepts>

// একটি কনসেপ্ট তৈরি করা
template<typename T>
concept Integral = std::is_integral_v<T>; // শুধুমাত্র ইন্টিগার টাইপ গ্রহণ করা

// টেমপ্লেট ফাংশন যেখানে কনসেপ্ট এবং কনস্ট্রেইন্ট ব্যবহার করা হচ্ছে
template <Integral T>
T multiply(T a, T b) {
    return a * b;
}

int main() {
    std::cout << multiply(5, 3) << std::endl;  // এটি কাজ করবে, কারণ 5 এবং 3 ইন্টিগার টাইপ
    // std::cout << multiply(5.5, 3.0) << std::endl; // এটি ত্রুটি দিবে, কারণ double এর জন্য Integral কনসেপ্ট কাজ করে না
    return 0;
}

এখানে, Integral একটি কনসেপ্ট যা নিশ্চিত করে যে টেমপ্লেট প্যারামিটার শুধুমাত্র ইন্টিগার টাইপ হবে। multiply ফাংশনটি সেই শর্ত অনুযায়ী কেবল ইন্টিগার টাইপের প্যারামিটার গ্রহণ করবে।


৩. Concepts এবং Template Constraints এর সুবিধা

  1. স্পষ্টতা: Concepts ব্যবহার করে টেমপ্লেট প্যারামিটারগুলির জন্য স্পষ্ট শর্ত আরোপ করা যায়, যা টাইপ সঠিকতা আরও পরিষ্কার করে তোলে।
  2. বাগ কমানো: Concepts এবং Template Constraints এর মাধ্যমে, কম্পাইল টাইমে ভুলগুলো ধরা পড়ে এবং প্রোগ্রামারদের জন্য তা সঠিক করতে সহায়ক হয়। এটি রানটাইমের ত্রুটিগুলোর সম্ভাবনা কমায়।
  3. পঠনযোগ্যতা: Concepts ব্যবহারে কোডটি পড়তে এবং বুঝতে সহজ হয়, কারণ টেমপ্লেট প্যারামিটারগুলির শর্ত সোজা এবং স্পষ্টভাবে উল্লেখ করা হয়।
  4. নির্ভরযোগ্যতা: Concepts ব্যবহার করে, নির্দিষ্ট শর্ত মেনে চলা উপাদানসমূহের সাথে কেবল কাজ করা যায়, ফলে নির্ভরযোগ্য প্রোগ্রামিং নিশ্চিত হয়।

৪. Concepts এর বিভিন্ন ব্যবহার

C++20 Concepts এর মাধ্যমে আরও অনেক শক্তিশালী ফিচার ব্যবহার করা সম্ভব, যেমন:

  • কনসেপ্ট কম্পোজিশন: একাধিক কনসেপ্ট একসাথে ব্যবহার করে নতুন কনসেপ্ট তৈরি করা।
template <typename T>
concept Addable = requires(T a, T b) {
    { a + b } -> std::same_as<T>;
};

template <typename T>
concept Multiplicable = requires(T a, T b) {
    { a * b } -> std::same_as<T>;
};

// দুটি কনসেপ্টের মিশ্রণ
template <typename T>
concept AddableAndMultiplicable = Addable<T> && Multiplicable<T>;

template <AddableAndMultiplicable T>
T performOperations(T a, T b) {
    return a + b * a;  // দুটি অপারেশন একসাথে করা
}
  • বৈশিষ্ট্য নির্ধারণ: Concepts ব্যবহার করে আপনার কোডের বৈশিষ্ট্য সহজে নির্ধারণ করতে পারেন, যেমন std::integral, std::floating_point ইত্যাদি।
template <std::integral T>
T sum(T a, T b) {
    return a + b;
}

সারাংশ

  • Concepts: C++20 এর একটি নতুন বৈশিষ্ট্য যা টেমপ্লেট প্যারামিটারগুলোর জন্য শর্ত আরোপ করে, এবং টেমপ্লেট টাইপ সঠিকতা সহজেই যাচাই করতে সহায়ক হয়।
  • Template Constraints: Concepts এর সাহায্যে টেমপ্লেট প্যারামিটারগুলির জন্য শর্ত আরোপ এবং যাচাইকরণ করা হয়।
  • ব্যবহার: Concepts এবং Constraints ব্যবহার করে কোডের স্পষ্টতা বৃদ্ধি, কম্পাইল টাইমে ত্রুটি সনাক্তকরণ এবং কোডের নিরাপত্তা নিশ্চিত করা যায়।

C++20 Concepts এবং Template Constraints নতুন ধারার টেমপ্লেট প্রোগ্রামিংয়ের জন্য অত্যন্ত শক্তিশালী টুল।

Content added By
Promotion

Are you sure to start over?

Loading...