C++ এ এরকম কোনো অপারেটর নেই। কখনও কখনও, আমাদের মোড়কের ধরন তৈরি করতে হবে। উদাহরণস্বরূপ, অনন্য_পিটিআর, শেয়ার্ড_পিটিআর, ঐচ্ছিক এবং অনুরূপ। সাধারণত, এই ধরনের .get নামক একটি অ্যাক্সেসর সদস্য ফাংশন থাকে তবে তারা অপারেটরকে প্রদান করে
সমস্যা হল যে কখনও কখনও আমরা একে অপরের মধ্যে এই ধরনের কয়েকটি বাসা বাঁধি৷ এর মানে হল যে আমরা .get-এ একাধিকবার কল করতে হবে বা মূল্যে না পৌঁছানো পর্যন্ত আমাদের প্রচুর ডিরেফারেন্স অপারেটর থাকতে হবে।
এই রকম কিছু -
wrapper<wrapper<std::string>> wp; wp.get().get().length(); wp.get()->length();
এটি একটি বিট কুশ্রী হতে পারে. আমরা যদি একটি .get() একটি তীর দিয়ে প্রতিস্থাপন করতে পারি, তাহলে দ্বিতীয় .get()টিকেও প্রতিস্থাপন করতে পারলে ভালো হবে। এর জন্য, C++98 একটি লং অ্যারো অপারেটর চালু করেছে।
wrapper<wrapper<std::string>> wp; wp--->length();
আমাদের মোড়ানোর আরেকটি স্তর থাকলে কী হবে? শুধু একটি লম্বা তীর তৈরি করুন।
wrapper<wrapper<wrapper<std::string>>> wp; wp----->length();
লম্বা তীরটি একক অপারেটর নয়, একাধিক অপারেটরের সংমিশ্রণ। এই ক্ষেত্রে, একটি স্বাভাবিক -> অপারেটর এবং পোস্টফিক্স হ্রাস অপারেটর --.
সুতরাং, যখন আমরা লিখি wp----→length(), কম্পাইলার দেখতে পায় ((wp--)--)→length()।
যদি আমরা পোস্টফিক্সকে সংজ্ঞায়িত করি -- ডিরেফারেন্স অপারেটর হিসাবে একই হতে, আমরা লং অ্যারো এবং আরও লম্বা তীর অপারেটর পাব −
template <typename T> class wrapper { public: T* operator->() { return &t; } T& operator--(int) { return t; } private: T t; };