मेरी लाइब्रेरी के कुछ कार्यों के परिणाम का परीक्षण और प्रदर्शन करने के लिए, मैं आसान कार्यों का एक सेट बना रहा हूं।वैश्विक प्रकार के रूपांतरण ऑपरेटर को ओवरलोड करना
template <typename R, typename I>
std::string execute(const std::string& func_name, R(*func_ptr)(const I&), const I& func_input);
यह फ़ंक्शन को कॉल करने, और एक स्वरूपित स्ट्रिंग है कि मैं std::cout
को भेज सकते हैं में परिणाम और तर्क प्रदर्शित:
मैं एक execute
समारोह है कि लगता है कि नहीं है।
समस्या यह है कि मेरे कुछ कार्य परिवर्तनीय-टू-स्ट्रिंग परिणाम वापस नहीं लौटते हैं। मैंने सोचा कि मैं बस की तरह कुछ के साथ वैश्विक ::operator std::string
ओवरलोड सकता है:
template <typename T>
operator std::string(const std::vector<T>& v);
लेकिन जीसीसी की शिकायत:
error: 'operator std::string(const std::vector<T, std::allocator<_CharT> >&)' must be a nonstatic member function
ठीक है, निश्चित रूप से समस्या यह है कि मैं भी नहीं के लिए std::vector
के सदस्य ऑपरेटरों जोड़ सकते हैं, और है मेरी कक्षाएं, मैं उन्हें "परीक्षण के लिए" रूपांतरण ऑपरेटरों के साथ प्रदूषित नहीं करना चाहता हूं।
मुझे लगता है कि मैं संकेतक की एक परत जोड़ सकता हूं और रूपांतरण ऑपरेटर की बजाय फ़ंक्शन का उपयोग कर सकता हूं, लेकिन यह अधिक सौंदर्य समाधान नहीं होगा। मैं ::operator <<
को std::ostream
के लिए भी अधिभारित कर सकता हूं और std::ostringstream
का उपयोग कर सकता हूं, लेकिन यह भी सबसे साफ समाधान नहीं है।
मुझे आश्चर्य हुआ कि क्या वैश्विक रूपांतरण ऑपरेटर वास्तव में अधिभार योग्य नहीं है, और यदि ऐसा है, तो क्यों।
लेकिन कई ऑपरेटरों वैश्विक या सदस्य के रूप में उपलब्ध हैं, क्यों नहीं इस एक? उदाहरण के लिए, यदि कोई वैश्विक और सदस्य ऑपरेटर << है, तो संकलक एक संदिग्ध कॉल के लिए शिकायत करता है, यह कनवर्टन के साथ एक ही चीज़ कर सकता है। – NewbiZ
रूपांतरण फ़ंक्शन विशेष सदस्य फ़ंक्शंस (जैसे ctor, dtor, op = और copy-constructor हैं) क्योंकि वे रूपांतरण/ऑब्जेक्ट सृजन में भाग लेते हैं। 12.3 देखें। – dirkgently