1
1

অনেক প্রোগ্রামারদের কোডে দেখি প্রথম ১৫-২০ লাইনই ভিবিন্ন টেমপ্লেট কিম্বা অন্যান্য জিনিসপত্রে ভরপুর! আবার দেখা যায় যেটা আমি ৫-১০ লাইনে করি ওটা তারাই ২/১ লাইনের মধ্যেই করে ফেলে। এই ব্যাপারগুলো সম্পর্কে জানতে চাই। বিশেষ করে টেমপ্লেট ! এটা কোথায় থেকে শিখবো এবং এ সম্পর্কিত প্রাসঙ্গিক তথ্যাদি জানালে উপকৃত হতাম। ধন্যবাদ :)

asked 28 Nov '15, 16:15

Rana's gravatar image

Rana
230421


Template মূলত একটি ব্লু-প্রিন্ট কোন ফাংশনের বা ক্লাসের। আপনি চাইলে template এর সাহায্যে বিভিন্ন কাজ খুব সহজে কম কোডে করতে পারেন।

মনে করুন এমন একটি প্রবলেম আপনার সামনে আসলো যেখানে আপনাকে দুটি ডাটার মধ্যে ছোট বড় নির্ণয় করতে হবে।এখন ডাটা দুটি হতে পারে string,int,double ডাটা টাইপের।

আপনি তিনটি ডাটা টাইপের জন্য তিনটি ফাংশন লিখতে পারেন যা ওই ডাটা গুলোর মধ্যে ছোট বড় নির্ণয় করতে পারে। এমন হলে ভালো হত যে আমি একটি ফাংশন লিখবো যা যে কোন ডাটার জন্য ছোট বড় নির্ণয় করতে পারবে। Template এই ক্ষেত্রে আমাকে সাহায্য করবে।

#include <iostream>
#include <string>

using namespace std;

template <typename T>
inline T max_val (T a, T b)
{
    return a < b ? b:a;
}
int main ()
{

    int i = 39;
    int j = 20;
    cout << "Max(i, j): " << max_val(i, j) << endl;

    double f1 = 13.5;
    double f2 = 20.7;
    cout << "Max(f1, f2): " << max_val(f1, f2) << endl;

    string s1 = "Hello";
    string s2 = "World";
    cout << "Max(s1, s2): " << max_val(s1, s2) << endl;

   return 0;
}
permanent link

answered 14 Dec '15, 15:41

Kaiser%20Ahmed's gravatar image

Kaiser Ahmed
3.2k522

এগুলো কি শুধু হাতে লিখতে হয় নাকি বিল্ড ইন টেমপ্লেটও আছে?

(18 Dec '15, 06:16) Rana

C++ ল্যাঙ্গুয়েজ বানানোর ক্ষেত্রে Template এর ভুমিকা অপরিসীম। তবে আপনি হয়তোবা জানতে চাচ্ছেন যে বিল্ড-ইন ফাংশন এর মত বিল্ড-ইন Template আছে কিনা। উত্তর হচ্ছে হ্যাঁ। আমরা যে sort() ফাংশন ব্যবহার করি তা কিন্তু একটি ফাংশন Template। কারন আমরা sort() ফাংশন এ একেকসময় একেক টাইপের ডাটা পাঠাই যা কিনা ল্যাঙ্গুয়েজ নিজেই বুঝে নেই কি ধরনের ডাটা আসছে।

বিস্তারিতঃ http://www.cplusplus.com/reference/algorithm/sort/ প্রথমেই লিখা আছে function template এবং সাথে সাথে কোড ও দেওয়া আছে Template এর।

(18 Dec '15, 11:00) Kaiser Ahmed

অনেক ধন্যবাদ

(19 Dec '15, 15:12) Rana

আপনাকে ও ধন্যবাদ গুরুত্বপূর্ণ প্রশ্নের জন্য।

(19 Dec '15, 18:33) Kaiser Ahmed

এটিকে অনেকে প্রিকোড বলে। এর ফলে অনেক কোড আগেই দেওয়া থাকে যেমন সব হেডারফাইল, কিছু ছোটোখাটো ফাংশন। আমার প্রিকোড এর একটি কপি দেওয়া হলো ।

প্রিকোড

এখানের একটি সুবিধাঃ আমাদের অনেকসময় ইনপুট সংখ্যা দেওয়া থাকে এবং আউটপুটে টেস্টকেস প্রিন্ট করতে হয়। এক্ষেত্রে শুরুতেই

TEST{

}

লিখলে এখানে অনেক কাজ কমে যায় ।

প্রিপ্রসেসর সম্পর্কে আরো জানতে
Bangla C programming tutorial 122 Prepocessor (#define)
Bangla C programming tutorial 123 Prepocessor (#include)
Bangla C programming tutorial 124 Prepocessor (all in one)

permanent link

answered 11 Dec '15, 13:17

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

আসলে তুমি যেই জিনিসটার কথা জিজ্ঞাস করছ এইটাকে টেম্পলেট বলে কিনা আমার জানা নাই । এইটাকে বলা হয় প্রিকোড । আর #define ব্লা ব্লা যাই লেখা হয় এইগুলাকে টেম্পলেট বলে না । এইগুলাকে বলা হয় ম্যাক্রো । আর অনেক ম্যাক্রো আছে । যাই হোক এইগুলা নিয়ে বিস্তারিত লেখা প্রশ্নের উত্তরের সাথে সামঞ্জস্যপূর্ণ হবে না আসলে । ম্যাক্রো ইউজ করার বেশ কিছু কারন আছে । এরফলে কোডে লেখার পরিমাণ কমে যায় । জাস্ট এই ম্যাক্রোকে কল দিলেই হয় । আর কিছু কারন আছে যেমন এর ফলে কোডের এক্সিকিউশন টাইম কমে আসে । এর ব্যাখ্যা জানার জন্য ম্যাক্রো ক্যামনে কাজ করে সেটা গুগল করে দেখা যেতে পারে । আবার শিল্ডের বই পড়লেও পাবা ।

তবে টেম্পলেট বলতে আমি যা বুঝি তা হল কিছু জেনেরিক ফাংশন । ধর তুমি min(a,b) এই ফাংশন দিয়ে a and b এর মধ্যে মিনিমাম কুনটা সেইটা জানতে চাও । আবার এইটাও জানো অনেক গুলা প্রিমিটিভ টাইপ আছে যেমনঃ int, long long int , long int , short int আরো কিছু টাইপ । এখন তুমি যদি min(int a , int b) এইভাবে ফাংশন ডিক্লার কর তখন কিন্তু long long a and long long b এর জন্য ভুল আন্সার আসবে (overflow এর জন্য) এর একটা সমাধান হল ফাংশন ওভারলোড করা(সি++ এর জন্য) । তবে এই ছোট ফাংশন বার বার ওভারলোড করার চেয়ে সুবিধা হয় একটা টেম্পলেট লিখে ফেললে । টেম্পলেট ব্যবহার করলে তুমি int , long long int , double সব কিছুর জন্যই এই ফাংশন কাজ করে । (বিস্তারিত গুগল :P)

permanent link

answered 14 Dec '15, 15:15

meta_bot's gravatar image

meta_bot
1463

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×131
×14
×1

question asked: 28 Nov '15, 16:15

question was seen: 2,540 times

last updated: 19 Dec '15, 18:33