টেমপ্লেট ছাড়ের গাইডগুলি একটি টেম্পলেট শ্রেণীর সাথে সম্পর্কিত নিদর্শন যা সংস্থাপককে কীভাবে ক্লাসের টেম্পলেট প্যারামিটারে কনস্ট্রাক্টর আর্গুমেন্টগুলির সেট (এবং তাদের প্রকারগুলি) অনুবাদ করতে হয় তা বলে।
সবচেয়ে সহজ উদাহরণ std::vector
এটির এবং এর নির্মাণকারী যা একটি পুনরুক্তি জুড়ি নেয়।
template<typename Iterator>
void func(Iterator first, Iterator last)
{
vector v(first, last);
}
কম্পাইলার জিনিসটা কি দরকার vector<T>
'র T
টাইপ হবে। আমরা উত্তর জানি কি; T
হওয়া উচিত typename std::iterator_traits<Iterator>::value_type
। তবে আমরা কীভাবে সংকলকটি বলি ছাড়া টাইপ করা vector<typename std::iterator_traits<Iterator>::value_type>
?
আপনি একটি ছাড়ের গাইড ব্যবহার করেন:
template<typename Iterator> vector(Iterator b, Iterator e) ->
vector<typename std::iterator_traits<Iterator>::value_type>;
এটি সংকলককে বলে যে আপনি যখন vector
সেই প্যাটার্নটির সাথে মিলে কোনও কনস্ট্রাক্টর কল করবেন তখন এটিটি কেটে যাবেvector
তখন ডানদিকে কোডটি ব্যবহার করে বিশেষীকরণটি->
।
আপনার যদি গাইডের দরকার হয় যখন আর্গুমেন্টগুলি থেকে প্রকারের কর্তন those যুক্তিগুলির একটির প্রকারের ভিত্তিতে নয়। একটি আরম্ভ করা vector
একটি থেকে initializer_list
স্পষ্টভাবে ব্যবহার vector
এরT
, সুতরাং এটির গাইডের প্রয়োজন নেই।
বাম দিক অগত্যা একটি প্রকৃত নির্মাণকারী নির্দিষ্ট করে না। এটি যেভাবে কাজ করে তা হ'ল, যদি আপনি কোনও ধরণের টেম্পলেট কনস্ট্রাক্টর ছাড়ের ব্যবহার করেন তবে এটি সমস্ত ছাড়ের গাইডের (প্রাথমিক টেমপ্লেটের প্রকৃত নির্মাতারা অন্তর্নিহিত গাইড সরবরাহ করে) বিরুদ্ধে আপনি যে যুক্তিগুলি দিয়ে যান তার সাথে এটি মেলে। যদি কোনও মিল থাকে তবে এটি কোনও টেমপ্লেট আর্গুমেন্টকে প্রকারটি সরবরাহ করবে তা নির্ধারণ করতে এটি ব্যবহার করে।
তবে একবার যদি এই ছাড়টি শেষ হয়ে যায়, একবার সংকলক টাইপের টেম্পলেট প্যারামিটারগুলি বের করে দেয়, সেই ধরণের অবজেক্টটির জন্য আরম্ভকরণটি এমনভাবে এগিয়ে যায় যেন সেটির কিছুই ঘটেনি। অর্থাত, নির্বাচিত কর্তন গাইডটি নির্বাচিত কনস্ট্রাক্টরের সাথে মেলে না ।
এর অর্থ হ'ল আপনি সমষ্টি এবং সামগ্রিক সূচনা সহ গাইডগুলি ব্যবহার করতে পারেন:
template<typename T>
struct Thingy
{
T t;
};
Thingy(const char *) -> Thingy<std::string>;
Thingy thing{"A String"};
সুতরাং ছাড়ের গাইডগুলি কেবল প্রারম্ভিক হওয়ার ধরণটি সনাক্ত করতে ব্যবহৃত হয়। আরম্ভের আসল প্রক্রিয়া ঠিক আগের মতোই কাজ করে, একবার দৃ determination় সংকল্প হয়ে গেলে।