C++ में ऐसा कोई ऑपरेटर नहीं है। कभी-कभी, हमें रैपर प्रकार बनाने की आवश्यकता होती है। उदाहरण के लिए, unique_ptr, shared_ptr, वैकल्पिक और समान जैसे प्रकार। आम तौर पर, इन प्रकारों में एक एक्सेसर सदस्य फ़ंक्शन होता है जिसे .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; };