निम्नलिखित कार्यक्रम पर विचार करें:std :: जोड़ी के मेरे विशेषज्ञता के लिए मैं ऑपरेटर को परिभाषित करना चाहिए >>?
#include <iostream>
#include <iterator>
#include <vector>
#include <utility>
using namespace std; //just for convenience, illustration only
typedef pair<int, int> point; //this is my specialization of pair. I call it point
istream& operator >> (istream & in, point & p)
{
return in >> p.first >> p.second;
}
int main()
{
vector<point> v((istream_iterator<point>(cin)), istream_iterator<point>());
// ^^^ ^^^
//extra parentheses lest this should be mistaken for a function declaration
}
यह रूप में जल्द ही क्योंकि संकलित करने के लिए यह std किसी भी अधिक की है कि क्या ऑपरेटर एसटीडी में पाया एक था परवाह किए बिना वैश्विक विस्तार पर विचार नहीं करता के रूप में ADL नाम स्थान में ऑपरेटर पाता >> विफल रहता है व्यवहार्य उम्मीदवार या नहीं। यह बल्कि असुविधाजनक है। अगर मैं अपने ऑपरेटर की घोषणा को नेमस्पेस std (जो तकनीकी रूप से गैरकानूनी है) में घोषित करता है तो कोड अपेक्षाकृत अच्छी तरह संकलित होता है। क्या point
बनाने के अलावा इस मुद्दे को हल करने का कोई तरीका है, इसे std namespace में टेम्पलेट के विशेषज्ञता के रूप में टाइप करने के बजाए अपनी खुद की कक्षा?
अग्रिम
आप 'विशेषज्ञता नहीं कर रहे हैं std :: यहाँ pair'। मुझे लगता है कि इस तरह से एडीएल के मुकाबले टेम्पलेट कोड को पार्स किया गया है। –