মানে, এর বাধ্যবাধকতার নাম (স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরি) বাদ দিয়ে ...
সি ++ প্রথমে সিএলে ওওপি ধারণাটি উপস্থাপনের উদ্দেশ্যে করা হয়েছিল এটি হল: আপনি নির্দিষ্ট শ্রেণীর শ্রেণি ও শ্রেণিবিন্যাসের ভিত্তিতে কোনও নির্দিষ্ট সত্তা কী করতে পারে এবং কী করতে পারে না তা বলতে পারে (তা এটি কীভাবে হয় তা নির্বিশেষে)। একাধিক উত্তরাধিকারের সমস্যাজনিত কারণে, এবং সি ++ কিছুটা আঠালো উপায়ে (জাভা ইত্যাদির তুলনায়) ইন্টারফেসের ধারণাকে সমর্থন করে তবে এই ক্ষমতাটির কিছু সংমিশ্রণ বর্ণনা করা আরও কঠিন but উন্নত)।
এবং তারপরে এসটিএল সহ টেম্পলেটগুলি কার্যকর হয়। এসটিএল ক্লাসিকাল ওওপি ধারণাটি গ্রহণ করেছে এবং পরিবর্তে টেমপ্লেটগুলি ব্যবহার করে সেগুলি ড্রেনের নীচে ফেলে দেবে।
কেসগুলির মধ্যে পার্থক্য থাকতে হবে যখন টেমপ্লেটগুলি প্রকারভেদে সাধারণকরণ করতে ব্যবহৃত হয় যেখানে টেমপ্লেটগুলি নিজেরাই টেমপ্লেটের ক্রিয়াকলাপের জন্য অপ্রাসঙ্গিক (উদাহরণস্বরূপ ধারক)। একটি vector<int>
সঠিক ধারণা তৈরি করে।
তবে, অন্যান্য অনেক ক্ষেত্রে (পুনরাবৃত্তকারী এবং অ্যালগোরিদম), টেম্পলেটযুক্ত ধরণেরগুলি একটি "ধারণা" অনুসরণ করে (ইনপুট আইট্রেটার, ফরোয়ার্ড আইট্রেটার, ইত্যাদি ...) অনুসরণ করা হয় যেখানে ধারণাটির আসল বিবরণ পুরোপুরি টেম্পলেট প্রয়োগের মাধ্যমে সংজ্ঞায়িত করা হয় ফাংশন / শ্রেণি, এবং টেমপ্লেটের সাথে ব্যবহৃত ধরণের শ্রেণীর দ্বারা নয়, যা কিছুটা ওওপি-র বিরোধী ব্যবহার।
উদাহরণস্বরূপ, আপনি ফাংশনটি বলতে পারেন:
void MyFunc(ForwardIterator<...> *I);
আপডেট: যেহেতু এটি আসল প্রশ্নে অস্পষ্ট ছিল, ফরোয়ার্ডআইট্রেটর কোনও ফরোয়ার্ডআইট্রেটারের ধরণের অনুমতি দেওয়ার জন্য নিজেই তা ছড়িয়ে দেওয়া ঠিক। বিপরীতে একটি ধারণা হিসাবে ফরোয়ার্ডআইট্রেটর থাকার।
একজন ফরোয়ার্ড আইট্রেটারকে কেবলমাত্র এর সংজ্ঞাটি দেখেই প্রত্যাশা করে, যেখানে আপনার বাস্তবায়ন বা ডকুমেন্টেশনগুলি দেখার প্রয়োজন হয়:
template <typename Type> void MyFunc(Type *I);
দুটি দাবী আমি টেমপ্লেটগুলি ব্যবহারের পক্ষে করতে পারি: সংযুক্ত কোডটি আরও কার্যকরভাবে তৈরি করা যায়, প্রতিটি ব্যবহৃত ধরণের জন্য টেমপ্লেটটি সংযোজন করে, ভিটিবেলগুলি ব্যবহার না করে। এবং টেমপ্লেটগুলি দেশীয় প্রকারের সাথে ব্যবহার করা যেতে পারে।
তবে, আমি আরও গভীর কারণ সন্ধান করছি কেন এসটিএলকে টেম্প্লেট করার পক্ষে শাস্ত্রীয় ওওপি ত্যাগ করেছি? (ধরে নিলাম আপনি এতদূর পড়েছেন: পি)
vector<int>
এবং প্রত্যাশার কোনও বিশেষ কারণ নেই vector<char>
। এগুলি, অবশ্যই, তবে আপনি একই সময়ে কোনও দুটি টুকরো কোড ব্যবহার করতে পারেন । টেমপ্লেট, সি ++ বা এসটিএল এর সাথে কোনও সম্পর্ক নেই। ইনস্ট্যান্টেশনে এমন কিছু নেই vector<int>
যা vector<char>
কোড লোড বা সম্পাদন করতে প্রয়োজন ।