ইতিমধ্যে একটি ব্যবহার রয়েছে যা ইতিমধ্যে সি ++ তে উল্লেখ করা হয়নি, এবং তা হ'ল নিজস্ব অবজেক্টের উল্লেখ করা বা কোনও প্রাপ্ত ভেরিয়েবল থেকে কোনও সদস্যকে বিচ্ছিন্ন করা নয়।
আপনি this
অন্যান্য টেমপ্লেটগুলির উত্তরাধিকার সূত্রে টেম্পলেট শ্রেণীর অভ্যন্তরে কোনও অ-নির্ভরশীল নামকে একটি যুক্তি নির্ভর নির্ভর নামতে রূপান্তর করতে ব্যবহার করতে পারেন ।
template <typename T>
struct base {
void f() {}
};
template <typename T>
struct derived : public base<T>
{
void test() {
//f(); // [1] error
base<T>::f(); // quite verbose if there is more than one argument, but valid
this->f(); // f is now an argument dependent symbol
}
}
টেমপ্লেট দুটি পাস ব্যবস্থার সাথে সংকলিত হয়। প্রথম পাসের সময়, কেবলমাত্র অ-তর্ক-নির্ভর নির্ভর নামগুলি সমাধান করে পরীক্ষা করা হয়, তবে নির্ভরশীল নামগুলি কেবলমাত্র সংযুক্তির জন্য পরীক্ষা করা হয়, টেমপ্লেট আর্গুমেন্টগুলি বাস্তবে না রেখে।
সেই ধাপে, প্রকৃতপক্ষে প্রকারটি প্রতিস্থাপন না করেই সংকলকটির কী base<T>
হতে পারে তার প্রায় কোনও তথ্য নেই (লক্ষ্য করুন যে বেস টেমপ্লেটের বিশেষায়িতকরণ এটি সম্পূর্ণ ভিন্ন ধরণের এমনকি এমনকি অপরিজ্ঞাত প্রকারগুলিতে রূপান্তর করতে পারে), সুতরাং এটি কেবল ধরে নেয় যে এটি একটি প্রকার । এই পর্যায়ে অ-নির্ভরশীল কল f
যা প্রোগ্রামারের কাছে কেবল স্বাভাবিক বলে মনে হয় এটি একটি প্রতীক যা সংকলকটিকে অবশ্যই সদস্য হিসাবে খুঁজে পেতে হবেderived
নেমস্পেসের বা বদ্ধ অবস্থায় উদাহরণে ঘটে না - এবং এটি অভিযোগ করবে।
সমাধানটি অ-নির্ভরশীল নামকে f
একটি নির্ভরশীল নামে পরিণত করছে। এটি বেশ কয়েকটি উপায়ে করা যেতে পারে, যেখানে এটি প্রয়োগ করা হয়েছে তা স্পষ্টভাবে উল্লেখ করে (- base<T>::f
সংকেত সংকেতকে base<T>
নির্ভর করে তোলে এবং সংকলকটি T
কেবল এটি অনুমান করে যে এটি উপস্থিত থাকবে এবং দ্বিতীয় পাসের জন্য প্রকৃত চেকটি স্থগিত করবে) যুক্তি প্রতিস্থাপন।
দ্বিতীয় উপায়, যদি আপনি একাধিক যুক্তি, বা দীর্ঘ নাম রয়েছে এমন টেম্পলেটগুলি থেকে উত্তরাধিকারী হন this->
তবে চিহ্নটির আগে একটি যুক্ত করা হচ্ছে । আপনি যে টেম্পলেট শ্রেণিটি প্রয়োগ করছেন সেটি আর্গুমেন্টের উপর নির্ভর করে (এটি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় base<T>
) this->
আর্গুমেন্ট নির্ভর এবং আমরা একই ফল পাই: this->f
টেম্পলেট প্যারামিটার প্রতিস্থাপনের পরে দ্বিতীয় রাউন্ডে পরীক্ষা করা হয়।
this
এমএসডিএন-এ যখন দরকার তখন আমি ভাল উদাহরণ পেয়েছি । দয়া করে এই লিঙ্কটি অনুসরণ করুন ... ;-)